[关闭]
@sensitive-cs 2017-03-17T15:43:09.000000Z 字数 632 阅读 819

[kuangbin带我飞]专题二 搜索进阶

题解


HDU 2181:哈密顿绕行世界问题
题意:略
思路:
深度优先搜索,大概是当搜索到20的时候判断与此点联通的点是否是出发点,不能用vis的出发点判断,因为先前已经赋值为真了。
用领接矩阵储存。
代码:

  1. #include <stdio.h>
  2. #include <string.h>
  3. bool g[21][21];
  4. bool vis[21];
  5. int tian[25];
  6. int m;
  7. int ans = 0;
  8. void dfs(int st,int cnt)
  9. {
  10. tian[cnt] = st;
  11. if (cnt == 20 && g[st][m])
  12. {
  13. tian[21] = m;
  14. ans++;
  15. printf("%d: ",ans);
  16. for (int i = 1;i <= 20;i++)
  17. printf("%d ",tian[i]);
  18. printf("%d\n",tian[21]);
  19. return;
  20. }
  21. for (int i = 1;i <= 20;i++)
  22. {
  23. if (!vis[i] && g[st][i])
  24. {
  25. vis[i] = 1;
  26. dfs(i,cnt+1);
  27. vis[i] = 0;
  28. }
  29. }
  30. return;
  31. }
  32. int main()
  33. {
  34. for (int i = 1;i <= 20;i++)
  35. {
  36. for (int j = 1;j <= 3;j++)
  37. {
  38. int x;
  39. scanf("%d",&x);
  40. g[i][x] = g[x][i] = 1;
  41. }
  42. }
  43. while (scanf("%d",&m) != EOF && m)
  44. {
  45. memset(vis,0,sizeof(vis));
  46. vis[m] = 1;
  47. dfs(m,1);
  48. }
  49. return 0;
  50. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注