当前位置:   article > 正文

洛谷刷题,P1718图像复原C++,图的深度优先遍历。

洛谷刷题,P1718图像复原C++,图的深度优先遍历。

 

输入#2:1                                                  输出#2:1

输入#3:1                                                   输入#3:1 2      

               1 2

  1. //第一行输入整数n(n<=50),表示为该图形有几个点。
  2. //根据输入整数n,输入2*n-3条不相交的路径(所有的边和n-3条不相交的对角线)
  3. //仅一行,按字典序较小的顺序依次输出顶点的编号。
  4. //深度优先遍历,递归
  5. #include<iostream>
  6. #include<vector>
  7. using namespace std;
  8. vector<int> x;
  9. vector<bool>y;
  10. int flag = 1;
  11. void dfs(vector<vector<bool> > G, int V, int chu,int n) {
  12. y[chu] = 1;
  13. if (V == n&&G[chu][1]==1) { flag = 0; x[V] = chu; return; }
  14. for (int i = 1; i <= n; i++) {
  15. if (y[i] == 0 && G[chu][i] == 1)
  16. dfs(G, V + 1, i, n);
  17. }
  18. if(flag) y[chu] = 0;
  19. x[V] = chu;
  20. }
  21. int main() {
  22. int n,i,a,b;
  23. cin >> n;
  24. y.resize(n + 1, 0);
  25. x.resize(n + 1);
  26. vector<vector<bool> > G(n + 1, vector<bool>(n + 1));
  27. for (i = 1; i <= 2 * n - 3; i++) {
  28. cin >> a >> b;
  29. G[a][b] = G[b][a] = 1;
  30. }
  31. dfs(G, 1, 1,n);
  32. for (i = 1; i <= n; i++)
  33. cout << x[i];
  34. return 0;
  35. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/590094
推荐阅读
相关标签
  

闽ICP备14008679号