UVA 10004 - Bicoloring(DFS)

题目链接

好假啊,1Y,我本以为会超时的,看来数据小啊。。。。在经过各种压线之后,目测这个学期不会挂科,淡定,实习完,继续刷题!!!

 1 #include <stdio.h>
 2 #include <string.h>
 3 int p[201][201],o[201],n,z;
 4 void dfs(int x,int y)
 5 {
 6     int i;
 7     if(z) return ;
 8     o[x]  = y;;
 9     for(i = 0;i <= n;i ++)
10     {
11         if(p[x][i] )
12         {
13             p[x][i] = 0;
14             if(o[i] == 0)
15             {
16                 if(y == 1)
17                     dfs(i,2);
18                 else if(y == 2)
19                     dfs(i,1);
20             }
21             else if(o[i] == y)
22             {
23                 z = 1;
24                 break;
25             }
26         }
27     }
28     return ;
29 }
30 int main()
31 {
32     int i,sv,ev,m;
33     while(scanf("%d",&n)!=EOF)
34     {
35         if(n == 0)break;
36         z = 0;
37         memset(p,0,sizeof(p));
38         memset(o,0,sizeof(o));
39         scanf("%d",&m);
40         for(i = 1;i <= m;i ++)
41         {
42             scanf("%d%d",&sv,&ev);
43             p[sv][ev] = 1;
44             p[ev][sv] = 1;
45         }
46         dfs(0,1);
47         if(z) 
48             printf("NOT BICOLORABLE.\n");
49         else 
50             printf("BICOLORABLE.\n");
51     }
52     return 0;
53 }

 

posted @ 2012-07-03 11:07  Naix_x  阅读(166)  评论(0)    收藏  举报