标签:style blog http color io 使用 for 数据 2014
zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。
规定,所有的边都只能画一次,不能重复画。
2 4 3 1 2 1 3 1 4 4 5 1 2 2 3 1 3 1 4 3 4
No Yes
能一笔画完的图必定满足的条件:1.该图是连通的
2.该图的奇度数节点为0或2
这里用了dfs遍历,由于用二维数组记录图,所以造成很多无谓的访问和判断,效率不是很高,不过还是a了,建议使用邻接表记录图。
1 #include<stdio.h> 2 bool visited[1005] = {false}; 3 int dotin[1005] = {0}; 4 int graph[1005][1005]; 5 void dfs(int k, int n) 6 { 7 visited[k] = true; 8 int i,j; 9 for (i=k; i <= n; i++) 10 { 11 for (j=1; j <= n; j++) 12 if (graph[k][j] != 0){ 13 if (!visited[j]) 14 dfs(j,n); 15 } 16 } 17 } 18 int main() 19 { 20 int n,p,q,a,b,i,j,dotnum = 0; 21 bool yes = true; 22 scanf("%d",&n); 23 for (i=1; i < 1001; i++) 24 for (j=1; j < 1001; j++) 25 graph[i][j] = 0; 26 while (n--) 27 { 28 scanf("%d%d",&p,&q); 29 for (i=0; i < q; i++) 30 { 31 scanf("%d%d",&a,&b); 32 graph[a][b] = 1; 33 graph[b][a] = 1; 34 dotin[a]++; 35 dotin[b]++; 36 } 37 dfs(1,p); 38 for (i=1; i <= p; i++) 39 if (!visited[i]) 40 { 41 yes = false; 42 break; 43 } 44 for (i=1; i <= p; i++) 45 if (dotin[i]%2) 46 dotnum++; 47 if ((yes && dotnum == 2) || (yes && dotnum == 0)) 48 printf("Yes\n"); 49 else 50 printf("No\n"); 51 yes = true; 52 dotnum = 0; 53 for (i=1; i <= p; i++) 54 dotin[i] = 0; 55 for (i=1; i <= p; i++) 56 visited[i] = false; 57 for (i=1; i <= p; i++) 58 for (j=1; j <= p; j++) 59 graph[i][j] = 0; 60 } 61 }
标签:style blog http color io 使用 for 数据 2014
原文地址:http://www.cnblogs.com/george-cw/p/3970732.html