/*判断能否给人以一条边的两个端点不同颜色,能就是二分图。
如果无环就一定非二分图,有环的情况下,只有某个环的边数是奇数就非二分图。
实际代码不是这么写,而是深度优先判断颜色。测试时修改edges测试多种情况。
为了方便编码,将大量使用全局变量。
*/
let generateGraph=require("./graph").generateGraph
let V=10
var edges=[[1,0],[1,3],[3,4],[8,4],[8,1],[7,8],[5,9],[7,4]]
console.log(G=generateGraph(V,edges))
var flg=true
var marked=[]
var colors=[]
for(let i=0;i<V;i++){
marked[i]=false
}
function dfs(v,G){
//console.log(v,colors,marked)
marked[v]=true
for(let j in G[v]){
let w=G[v][j]
if(!marked[w]){
//console.log('--->changing color of',w)
colors[w]=!colors[v]
dfs(w,G)
}else if(colors[w]==colors[v]){
flg=false
}
}
}
let s=0
colors[s]=true
dfs(s,G)
console.log(flg)
js版本无向图的判断二分图(双色问题)
最新推荐文章于 2023-04-13 21:20:12 发布