js版本无向图的判断二分图(双色问题)

/*判断能否给人以一条边的两个端点不同颜色,能就是二分图。
如果无环就一定非二分图,有环的情况下,只有某个环的边数是奇数就非二分图。
实际代码不是这么写,而是深度优先判断颜色。测试时修改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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值