fork download
  1. //오일러 경로 / 회로 구하는 코드
  2. #include <iostream>
  3. #include <stack>
  4. using namespace std;
  5. int n;
  6. int degree[1001];
  7. int adj[1001][1001]; //adj[i][j] : i -> j로 가는 간선의 수
  8.  
  9. void dfs(int n, stack<int>& E)
  10. {
  11. for (int i = 1; i <= n; i++)
  12. {
  13. if (adj[n][i] > 0)
  14. {
  15. //양방향 그래프이므로 양쪽으로 지워준다
  16. adj[n][i]--;
  17. adj[i][n]--;
  18. dfs(i, E);
  19. }
  20. }
  21. E.push(n);
  22. }
  23.  
  24. stack<int> get_Euler()
  25. {
  26. stack<int> E;
  27. dfs(n, E);
  28. return E;
  29. }
  30.  
  31. int main()
  32. {
  33. cin >> n;
  34. for(int i=1; i<=n; i++)
  35. {
  36. for(int j=1; j<=n; j++)
  37. cin>>adj[i][j];
  38. }
  39. //입력 및 필요충분조건 확인 함수 생략
  40. stack<int> Euler;
  41. Euler = get_Euler();
  42. while(!Euler.empty())
  43. {
  44. cout<<Euler.top()<<' ';
  45. Euler.pop();
  46. }
  47.  
  48. for(int i=1; i<=n; i++)
  49. {
  50. for(int j=1; j<=n; j++)
  51. cout<<adj[i][j];
  52. cout<<endl;
  53. }
  54. }
  55.  
Success #stdin #stdout 0.01s 5512KB
stdin
7
0 1 1 1 0 0 1
1 0 1 0 0 0 0
1 1 0 1 0 0 1
1 0 1 0 1 1 0
0 0 0 1 0 0 1
0 0 0 1 0 0 1
1 0 1 0 1 1 0
stdout
7 6 4 5 4 3 1 3 2 1 1 1 0000000
0000000
0000000
0000000
0000000
0000000
0000000