void dfs(int u,int num){
for(int k=0;k<G[u].size();k++){
int i=G[u][k];
if(u==i)continue;
if(color[i]==-1){
color[i]=color[u]^1;
dfs(i,num);
p[num][color[i]].push_back(i);
} else {
if(color[i]==color[u]){
flag=1;
return;
}
}
}
}
for(int i=1;i<=n;i++){
if(color[i]==-1){
color[i]=0;
p[++cnt][0].push_back(i);
dfs(i,cnt);
}
if(flag){
cout << "No solution\n";
return;
}
}
这份代码是没问题的,但是当我加一个bool 数组v表示i点是否访问过时,代码无法通过,不知道为什么
void dfs(int u,int num){
for(int k=0;k<G[u].size();k++){
int i=G[u][k];
if(u==i)continue;
if(!v[i]){
color[i]=color[u]^1;
v[i]=1;
dfs(i,num);
p[num][color[i]].push_back(i);
} else {
if(color[i]==color[u]){
flag=1;
return;
}
}
}
}
for(int i=1;i<=n;i++){
if(!v[i]){
color[i]=0;
p[++cnt][0].push_back(i);
v[i]=1;
dfs(i,cnt);
}
if(flag){
cout << "No solution\n";
return;
}
}