HDU4337 King Arthur's Knights【哈密顿回路】
来源:互联网 发布:以太网传输数据 编辑:程序博客网 时间:2024/04/28 11:06
题意:输出一条哈密顿回路
思路:由于每个点的度大于等于(N+1)/ 2,所以一定存在,用一下模板
#include<stdio.h>#include<iostream>#include<string.h>#include<string>#include<stdlib.h>#include<math.h>#include<vector>#include<list>#include<map>#include<stack>#include<queue>#include<algorithm>#include<numeric>#include<functional>using namespace std;typedef long long ll;const int maxn = 155;int n;bool G[maxn][maxn]; int x[maxn];//记录回路中的第i个点 void init(){memset(G,0,sizeof G);}void hamilton(){ bool s[maxn]; for(int i = 0; i < n; i++){ x[i] = -1; s[i] = false; } int k = 1; s[0] = true; x[0] = 0; while(k >= 0){ x[k]++; while(x[k] < n){ if(!s[x[k]] && G[x[k - 1]][x[k]]) break; else x[k]++; } if((x[k] < n) && (k != n - 1)){ s[x[k++]] = true; } else if( (x[k] < n) && k == n - 1 && G[x[k]][x[0]] ) break; else{ x[k] = -1; k--; s[x[k]] = false; } } }//hamilton函数中下标从0开始int main(void){int m,i;while(scanf("%d %d",&n,&m)!=EOF){init();while(m--){int a,b;scanf("%d%d",&a,&b);a--;b--;G[a][b] = G[b][a] = 1;}hamilton();for(i = 0; i < n; i++)printf("%d%c",x[i]+1,i==n-1?'\n':' ');}return 0;}
阅读全文
0 0
- HDU4337 King Arthur's Knights【哈密顿回路】
- hdu - 4337 - King Arthur's Knights - 哈密顿回路
- hdu4337 King Arthur's Knights
- hdu4337 King Arthur's Knights
- hdu 4337 King Arthur's Knights(哈密顿回路,4级)
- HDU 4337 King Arthur's Knights 输出一条哈密顿回路
- HDU 4337 King Arthur's Knights 【哈密顿模板题】
- hdu4337 King Arthur's Knights(dfs回溯)
- HDU4337(哈密顿回路)
- 2012 Multi-University Training Contest 4-1007 hdu4337 King Arthur's Knights
- HDU 4337 King Arthur's Knights 稠密图构造汉密尔顿回路
- hdu 4337 King Arthur's Knights#DFS
- hdu 4337 King Arthur's Knights
- King Arthur's Knights —— 结题报告!
- HDU 4337 King Arthur's Knights(暴力dfs)
- hdu 4337 King Arthur's Knights(dfs)
- HDU 4337 King Arthur's Knights (图论+dfs) = =
- King Arthur's Knights hdu 4337 汉密尔顿图(模板)
- Servlet简介
- 电机发热问题
- jquery实现图片上传前本地预览功能
- 初识IOS ,几个关键字,修饰符
- 160
- HDU4337 King Arthur's Knights【哈密顿回路】
- 集合遍历的线程安全问题
- 161
- 162
- CSDN代码片高亮显示,让你的博客更加靓丽~~
- 163
- 164
- 165
- 166