当前位置: 首页 > wzjs >正文

网页设计初学者公司网页设计模板班级优化大师免费下载电脑版

网页设计初学者公司网页设计模板,班级优化大师免费下载电脑版,网站建设指引,手机动态网站制作二分图判定算法 判断二分图dfs遍历bfs遍历 可能的二分法bfs遍历dfs遍历 二分图判定说白了就是遍历一遍图,一边遍历一边染色,看看能不能用两种颜色给所有节点染色,且相邻节点的颜色都不相同。 // 图遍历框架dfs var traverse function(graph,…

二分图判定算法

  • 判断二分图
    • dfs遍历
    • bfs遍历
  • 可能的二分法
    • bfs遍历
    • dfs遍历

二分图判定说白了就是遍历一遍图,一边遍历一边染色,看看能不能用两种颜色给所有节点染色,且相邻节点的颜色都不相同。

// 图遍历框架dfs
var traverse = function(graph, visited, v) {visited[v] = true;// 遍历节点 v 的所有相邻节点 neighborfor (var neighbor of graph.neighbors(v)) {if (!visited[neighbor]) {// 相邻节点 neighbor 没有被访问过// 那么应该给节点 neighbor 涂上和节点 v 不同的颜色traverse(graph, visited, neighbor);} else {// 相邻节点 neighbor 已经被访问过// 那么应该比较节点 neighbor 和节点 v 的颜色// 若相同,则此图不是二分图}}
}

判断二分图

链接在这里插入图片描述

dfs遍历

class Solution {//用dfs遍历一遍图boolean res=true;boolean []visit;//保证每个节点只当一次start向四周染色boolean []col;public boolean isBipartite(int[][] graph) {int sz=graph.length;//节点的个数visit=new boolean[sz];col=new boolean[sz];for(int i=0;i<sz;i++){if(!visit[i]){dfs(graph,i);}}return res;}void dfs(int[][]graph,int start){if(res==false){return;}visit[start]=true;for(int neibor:graph[start]){if(!visit[neibor]){//染色col[neibor]=!col[start];dfs(graph,neibor);}else{//判断if(col[neibor]==col[start]){res=false;return;}}}}
}

bfs遍历

class Solution {public boolean isBipartite(int[][] graph) {int n=graph.length;boolean[]visit=new boolean[n];//记录进队列的节点,保证每个节点只进一次,进一次就相当于以这个节点为start了向四周染色了boolean[]col=new boolean[n];Queue<Integer> q=new LinkedList();for(int i=0;i<n;i++){if(visit[i]){continue;}//从i开始bfsq.add(i);visit[i]=true;while(!q.isEmpty()){int cur=q.poll();for(int neibor:graph[cur]){if(!visit[neibor]){//染色col[neibor]=!col[cur];q.add(neibor);visit[neibor]=true;}else{//检查if(col[neibor]==col[cur]){return false;}}}}}return true;}
}

可能的二分法

链接
在这里插入图片描述

bfs遍历

class Solution {//染过颜色就visit标记一下,然后进队列,进了队列就一定会出队列,出队列就会以它为中心向四周染色,visit[i]为真代表以i为中心向四周染色过public boolean possibleBipartition(int n, int[][] dislikes) {//先创建图,然后将图染色List<Integer>[]graph=new LinkedList[n+1];for(int i =1;i<=n;i++){graph[i]=new LinkedList();}for(int []e:dislikes){int a=e[0];int b=e[1];graph[a].add(b);graph[b].add(a);}boolean[]visit=new boolean[n+1];Queue<Integer> q=new LinkedList();boolean[]col=new boolean[n+1];for(int i=1;i<=n;i++){if(visit[i]){continue;}q.add(i);visit[i]=true;while(!q.isEmpty()){int cur=q.poll();for(int neibor:graph[cur]){if(!visit[neibor]){//染色col[neibor]=!col[cur];q.add(neibor);visit[neibor]=true;}else{//判断if(col[neibor]==col[cur]){return false;}}}}}return true;}
}

dfs遍历

class Solution {boolean[]col;boolean[]visit;//保证了每个节点都当过start一次,向四周染色boolean isBi=true;public boolean possibleBipartition(int n, int[][] dislikes) {//先创建图,然后将图染色List<Integer>[]graph=new LinkedList[n+1];for(int i =1;i<=n;i++){graph[i]=new LinkedList();}for(int []e:dislikes){int a=e[0];int b=e[1];graph[a].add(b);graph[b].add(a);}visit=new boolean[n+1];//visit[i]=true说明 以i为start向四周染色过col=new boolean[n+1];for(int i=1;i<=n;i++){if(!visit[i]){//没有以i为start过dfs(graph,i);}if(isBi==false){return false;}}return true;}//定义:从start开始遍历图,一边遍历一边涂色void dfs(List<Integer>[]graph,int start){if(!isBi){//已经知道不是二分图return;}visit[start]=true;for(int neibor:graph[start]){if(!visit[neibor]){//涂色col[neibor]=!col[start];dfs(graph,neibor);}else{if(col[neibor]==col[start]){isBi=false;return;}}}}
}
http://www.dtcms.com/wzjs/198214.html

相关文章:

  • 中文url转码百度seo可能消失
  • 关于网站建设的毕业论文优化大师会员兑换码
  • 做网站有哪个空间semi认证
  • 传播建设网站最新足球赛事
  • 互联网c2c交易类网站详细策划书营销到底是干嘛的
  • 新闻网站建设汇报材料seo快速排名百度首页
  • 哪里有专业做网站的互动营销名词解释
  • 深圳实力网站建设线上网络平台推广
  • 深圳企业网站公司口碑营销公司
  • 什么网站可以接单做海报张家界百度seo
  • 南昌好的做网站的公司营销网店推广的软文
  • 工信部备案查询企业名单武汉seo服务外包
  • 万户网站建设公司长尾词在线挖掘
  • 免费申请网站空间及域名人民日报新闻
  • 怎么做qq盗号网站nba在线直播免费观看直播
  • 利用店铺网站做灰色优化济宁seo公司
  • 佛山模板网站建站上海推广网络营销咨询热线
  • 网站建设自优化营商环境心得体会1000字
  • 十大免费观看软件下载seo排名赚能赚钱吗
  • 广州商城网站建设100个商业经典案例
  • 电商网站制作设计百度关键词价格计算
  • 网站推广都做什么内容网站怎么优化seo
  • 国内flask做的网站醴陵网站制作
  • 福州建网站 做网页南京seo网络优化公司
  • wordpress add_filter四川自助seo建站
  • 打开网站出现directory百度推广账户登录首页
  • wordpress tag中文seo门户 site
  • 鄂尔多斯网站制作公司搜索优化引擎
  • 网站怎么做统计百度入口提交
  • 多国语言网站建设网站运营seo实训总结