hdu 5424(dfs搜索)
来源:互联网 发布:招聘数据统计分析表 编辑:程序博客网 时间:2024/05/20 11:49
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5424
官方题解:
如果图是联通的,可以发现如果存在哈密顿路径,一定有一条哈密顿路径的一端是度数最小的点,从哪个点开始直接DFS搜索哈密顿路径复杂度是
#include<iostream>#include<cstdio>#include<cstring>#include<vector>using namespace std;const int maxn = 1005;int n,flag,mat[maxn][maxn],degree[maxn];bool vis[maxn];void dfs(int u,int depth){if(flag) return;vis[u] = true;if(depth == n){flag = 1;return;}for(int i = 1; i <= n && !flag; i++){if(vis[i] == true || mat[u][i] == 0) continue;dfs(i,depth+1);vis[i] = false; //必须要消除标记,不能一条路走到死}}int main(){int u,v;while(scanf("%d",&n)!=EOF){memset(mat,0,sizeof(mat));memset(degree,0,sizeof(degree));for(int i = 1; i <= n; i++){scanf("%d%d",&u,&v);if(u != v && mat[u][v] == 0){mat[u][v] = mat[v][u] = 1;degree[u]++; degree[v]++;}}memset(vis,false,sizeof(vis));int tot = 0,rt = 1;for(int i = 1; i <= n; i++)if(degree[i] == 1){tot++;rt = i;}if(tot > 2) //需要特判一下,否则TLE{printf("NO\n");continue;}flag = 0;dfs(rt,1);if(flag == 1) printf("YES\n");else printf("NO\n");}return 0;}
0 0
- hdu 5424(dfs搜索)
- HDU 1312(搜索题,DFS)
- HDU 1241(搜索题,DFS)
- HDU 1010(搜索题,DFS+剪枝)
- HDU 1016(搜索题,DFS)
- HDU 1241Oil Deposits(dfs搜索)
- HDU 1072 Nightmare(搜索-DFS)
- HDU 1035 Robot Motion (搜索-DFS)
- HDU 5167 Fibonacci(DFS暴力搜索)
- hdu 1716 排列2(DFS搜索)
- hdu 1241 简单 搜索DFS (深搜)
- hdu 1010 搜索(dfs+剪枝)
- 搜索专题(DFS)HDU 1072-Nightmare
- 搜索--HDU简单DFS
- HDU 1175(搜索DFS)
- DFS+记忆搜索-HDU-1078
- HDU 1016 搜索问题 dfs
- HDU 1242 Rescue (搜索 DFS)
- 集合对象的声明和初始化
- jQuery实现表格的查看修改删除
- 提高项目38-带姓名的成绩单
- ContextMenu菜单
- 9C - Hexadecimal's Numbers
- hdu 5424(dfs搜索)
- Loopback接口的主要作用
- 状态机(一)
- 指针遍历二维数组的三种方式
- 安装smooks以及eclipse插件
- 观察者模式——解决、解耦的钥匙
- Swift 中枚举高级用法及实践
- 视屏播放(直播)
- 具备迭代器功能的容器类sequence