HDU 4337 King Arthur's Knights——回溯法
2014-05-31 16:59
260 查看
题目链接点击打开链接
此题我用dfs回溯,百度到有更牛逼的算法,鉴于水平不行,还是用会的dfs吧……做题
有几个失误,导致一直得不到结果
1.变量i被我声明成了全局变量……所以在回溯时,i的值变了……
2.判断语句是 if(rela[a[cur-1]][i]&&!vis[i]) 而不是 if(rela[cur-1][i]&&!vis[i])……
或者将dfs声明为dfs(int x,int cur) x记录a[cur-1],cur记录当前到了第几个数。
3.最终cur=n+1。
4.最后一个空格不要输出,否则会错……
AC代码
此题我用dfs回溯,百度到有更牛逼的算法,鉴于水平不行,还是用会的dfs吧……做题
有几个失误,导致一直得不到结果
1.变量i被我声明成了全局变量……所以在回溯时,i的值变了……
2.判断语句是 if(rela[a[cur-1]][i]&&!vis[i]) 而不是 if(rela[cur-1][i]&&!vis[i])……
或者将dfs声明为dfs(int x,int cur) x记录a[cur-1],cur记录当前到了第几个数。
3.最终cur=n+1。
4.最后一个空格不要输出,否则会错……
AC代码
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<cmath> #include<algorithm> #include<iomanip> #include<stdlib.h> #include<set> #include<map> #include<queue> using namespace std; int a[1000],rela[1000][1000],vis[1000]; int n,m,flag=0; void dfs(int cur) { if(flag) return ; if(rela[1][a ]&&cur==n+1) { for(int i=1; i<=n; i++) { cout<<a[i]; i==n? cout<<endl:cout<<" "; } flag=1; } else { for(int i=2; i<=n; i++) { if(rela[a[cur-1]][i]&&!vis[i]) { a[cur]=i; vis[i]=1; dfs(cur+1); vis[i]=0; } } } } int main() { while(cin>>n>>m) { memset(vis,0,sizeof(vis)); memset(rela,0,sizeof(rela)); for(int i=0; i<m; i++) { int a,b; cin>>a>>b; rela[a][b]=1; rela[b][a]=1; } flag=0; a[1]=1; dfs(2); if(flag==0) cout<<"no solution\n"; } return 0; }
相关文章推荐
- hdu - 4337 - King Arthur's Knights - 哈密顿回路
- HDU 4337 King Arthur's Knights 它输出一个哈密顿电路
- hdu 4337 King Arthur's Knights
- HDU 4337 King Arthur's Knights(暴力dfs)
- King Arthur's Knights hdu 4337 汉密尔顿图(模板)
- hdu 4337 King Arthur's Knights(dfs)
- HDU&nbsp;4337&nbsp;King&nbsp;Arthur&#039;s&nbsp;Knights(…
- HDOJ&nbsp;&nbsp;4337&nbsp;&nbsp;&nbsp;King&nbsp;Arthur&#039;s&nbsp;Knigh…
- hdu 5640 King's Cake(模拟)
- HDU 5641 King's Phone
- hdu5642 King's Order(数位dp)
- HDU 5640 King's Cake(贪心)
- HDU 5642 King's Order(dp)
- hdu 5643 King's Game 数学 约瑟夫问题
- hdu 5642 King's Order 递推
- HDU 3861--The King’s Problem【scc缩点构图 && 二分匹配求最小路径覆盖】
- HDU 5642 King's Order
- POJ 3682 King Arthur's Birthday Celebration (概率DP)
- hdu 5201 The Monkey King && BestCoder Round #36
- HDU 5640 King's Cake