这道题我始终还是看了题解,不过有进步的是我看了他的想法自己实现的,恩恩,就是要这样 ,一定得先有个正确的
想法,这样才能做对题,敲代码之前想法就错了那么一定做不对题目的,我之前想的是只要存在环就不会实现去全部染
色,其实是可以的,当这个环是奇数的时候就可以,偶数的时候不可以。所以我用的dfs每次遍历的时候遇到没有染色
的就染色,遇到染过色的就判断一下是否是一样的颜色。
贴代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> int visit[205]; int map[205][205]; int m,n,flag; void dfs(int x) { for(int i=0; i<n; i++) { if(map[x][i]==1) { if(visit[i]!=0) { if(visit[i]==visit[x]) { flag = 0; return; } } else { if(visit[x]==2) visit[i] = 3; else visit[i] = 2; dfs(i); } } } return ; } int main() { int i,x,y; while(scanf("%d",&n),n!=0) { memset(visit,0,sizeof(visit)); memset(map,0,sizeof(map)); scanf("%d",&m); for(i=0; i<m; i++) { scanf("%d%d",&x,&y); map[x][y]=map[y][x]=1; } for(i=0; i<n; i++) { flag = 1; if(visit[i]==0) { visit[i] = 2; dfs(i); } if(flag == 0) { break; } } if(flag) puts("BICOLORABLE."); else puts("NOT BICOLORABLE."); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-07 21:16:10