hdu 5424 dfs
2015-09-03 10:40
295 查看
[code]#include <cstdio> #include <iostream> #include <cstring> #include <vector> #include <queue> using namespace std; int ma[1005][1005]; int vis[1005]; int n; int d[1005]; #define INF 1000000 int bfs(int u){ memset(vis,0,sizeof(vis)); queue<int> que; que.push(u); vis[u] = 1; while(!que.empty()){ int u = que.front(); que.pop(); for(int i = 1;i <= n;i++){ if(!vis[i] && ma[u][i] == 1){ que.push(i); vis[i] = 1; } } } for(int i = 1;i <= n;i++){ if(!vis[i]){ return 0; } } return 1; } int dfs(int u,int st){ vis[u] = 1; if(st == n) return 1; for(int i = 1;i <= n;i++){ if(!vis[i] && ma[u][i] == 1){ if(dfs(i,st+1)){ return 1; } else{ vis[i] = 0; } } } return 0; } int main(){ while(cin >> n){ memset(ma,0,sizeof(ma)); memset(d,0,sizeof(d)); for(int i = 0;i < n;i++){ int x,y; scanf("%d%d",&x,&y); if(x != y){ if(!ma[x][y]){ ma[x][y] = 1; ma[y][x] = 1; d[x]++; d[y]++; } } } if(!bfs(1)){ printf("NO\n"); } else{ memset(vis,0,sizeof(vis)); int ma = INF; int k = 0; for(int i =1;i <= n;i++){ if(d[i] < ma){ ma = d[i]; k = i; } } if(dfs(k,1)){ printf("YES\n"); } else{ printf("NO\n"); } } } return 0; }
要从最小度开始,那里才是起点和终点
相关文章推荐
- ubuntu 下adb devices找不到设备
- [微信营销企划之路]003.Access forbidden!
- NoSQL开篇
- 整数解 (hdu 2092
- 华为oj_图片整理
- 华为oj_合唱队
- UVA 1623
- 【剑指offer】十四,栈的压入、弹出序列
- 省图wifi
- 华为oj_字符串最后一个单词的长度
- 奔跑在学习的道路上,有你,有他,有她,有大家(UIT)
- android 使用WebView 支持播放优酷视频,土豆视频
- 【bzoj3613】【heoi2014】【南园满地堆轻絮】【线性做法】
- Qt特殊符号
- [算法] shell sort
- simplexml
- 归并排序
- 位运算相关总结
- oracle union 用法
- pacman -Syu : key could not be looked up remotely.