当前位置: 首页 > 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/480117.html

相关文章:

  • 北京市顺义区住房和城乡建设委员会官方网站企业网站怎么注册官网
  • 深圳外包公司网站搜索引擎优化 简历
  • 网站开发工程师前景分析杭州seo技术
  • 天津响应式网站设计重庆网站建设
  • 厦门seo厦门起梦seo外链工具源码
  • 哈尔滨招标网官网seo俱乐部
  • 最新的网络项目代理seo与网络推广的区别和联系
  • 台前做网站的公司今日特大军事新闻
  • wordpress插件去除版权优化排名推广关键词
  • 昆明网站建设公司哪家便宜seo有些什么关键词
  • 建设网站找什么问题五个成功品牌推广案例
  • 网站开发语言检测seo实训报告
  • 小区服务网站怎么做最近三天的新闻大事简短
  • 外贸在什么网站做福州百度网站排名优化
  • 如何开网站做代销四大营销策略
  • 做期货都看哪个网站企业管理培训课程视频
  • 网站建设供应商分析表百度小说风云榜
  • 关于网站建设管理的通知2023b站免费推广入口
  • 开发网站手机版上海网站搜索引擎优化
  • app开发和网站开发哪个简单举例说明什么是seo
  • 盐城做网站公司培训机构不退费最有效方式
  • 网站开发的技术内容淘宝seo
  • 建立一个网站怎么做西安关键字优化哪家好
  • 做赛事预测网站北京网站seo技术厂家
  • 免费h5页面制作软件app英文seo兼职
  • 做翻译兼职的网站网盟推广是什么意思
  • wordpress会员组长沙seo外包优化
  • 温州网站关键词排名seo排名计费系统
  • 做视频网站空间要多大优化怎么做
  • 平潭做网站晚上必备免费软件大全苹果