1. 如图
判断左图是否为二部图。(显然是二部图,如右图所示)


2. js代码实现
console.log(Bipartite_Graph());
// 二部图的判断算法:Bipartite Graph
function Bipartite_Graph(){
v_num=8;
G=new Array(v_num).fill(0).map(()=>new Array(v_num).fill(0));
G[0][1]=1;G[0][3]=1;G[0][4]=1;G[1][0]=1;G[1][2]=1;G[1][5]=1;G[2][1]=1;G[2][3]=1;G[2][6]=1;G[3][0]=1;G[3][2]=1;G[3][7]=1;
G[4][0]=1;G[4][5]=1;G[4][7]=1;G[5][1]=1;G[5][4]=1;G[5][6]=1;G[6][2]=1;G[6][5]=1;G[6][7]=1;G[7][3]=1;G[7][4]=1;G[7][6]=1;
visit=new Array(v_num).fill(0); /* 访问标记 */
Queue=new Array(); /* 访问队列 */
flag=true; /* 判定符号 */
Queue.push(0); /* 起始节点入队列 */
visit[0]=1;
while(Queue.length>0){
node=Queue[0]; /* 出队列 */
Queue.shift();
for(i=0;i<v_num;i++){
if(G[node][i]==1){ /* 判断是否有边 */
if(visit[i]==0){ /* 未被访问过 */
visit[i]=-visit[node];
Queue.push(i);
}else{
if(visit[node]==visit[i]){ /* 已访问结点标记是否一致 */
flag=false;
break;
}
}
}
}
if(!flag){ /* 跳出循环 */
break;
}
}
return flag;
}
文章介绍了一个JavaScript函数Bipartite_Graph(),用于判断给定的图是否为二部图。通过建立邻接矩阵表示图,并使用深度优先搜索进行遍历,检查相邻节点的标记是否一致来确定图是否具有二部性。

被折叠的 条评论
为什么被折叠?



