#include <iostream>
#include <cstring>
using namespace std;
int visited[1001];
int path[1001][1001];
int color[1001];
bool flag;
int n,m;
void dfs(int root){
for(int i=1;i<=n;i++){
//精髓所在,在for循环里面,如果与跟节点相连,那么依次递归下去
if(path[root][i] == 1){
if(!visited[i]){
visited[i] = 1;
color[i] = color[root]==1 ? 0 : 1;//分别染不同的颜色
dfs(i);
}
else if(color[i] == color[root]){
flag = false;
return ;
}
}
}
}
int main(){
cin>>n>>m;
memset(visited,0,sizeof(visited));
memset(path,0,sizeof(path));
memset(color,0,sizeof(color));
flag = true;
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
path[a][b] = path[b][a] = 1;
}
dfs(1);
if(flag){
cout<<"yes"<<endl;
}
else cout<<"no"<<endl;
return 0;
}
图深度优先搜索之二染色
最新推荐文章于 2022-03-17 18:50:27 发布