欧拉环路 : 无向图的所有点的 度 都是 偶数 时 就一定可以形成一个环路。
欧拉路径(一笔画): 无向图的所有点的 度 都是 偶数 时 或者 度of奇数 的 点 of num <=2 时 一定可以形成 欧拉路径。
小注意:为什么用递归的方式(dfs)做一笔画 而且 路径在最下面:
应为第一个返回递归时 一定是最后那个奇数度的点 所有倒叙记入路径 一定不会有错。
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cmath> #include<cstdlib> #include<queue> #include<stack> #include<map> #include<vector> #include<functional> #define M 1005 using namespace std; int i,j,n,m,arr[M][M],numm,vis,ans[100000],sp,beginn=1,r; void dfs(int k) { for(int ii=1;ii<=n;ii++) { if(arr[k][ii]==1) { arr[k][ii]=0; arr[ii][k]=0; dfs(ii); } } ans[numm++]=k; } int main(){ scanf("%d",&n); for(i=1;i<=n;i++) { sp=0; for(j=1;j<=n;j++) { cin>>arr[i][j]; if(arr[i][j]==1) sp++; } if(sp%2==1&&r==0) beginn=i; if(sp%2==1) r++; } if(r==0||r==2) { dfs(beginn); for(i=numm-1;i>=0;i--) { if(i!=numm-1) cout<<" "; cout<<ans[i]; } } else cout<<"No Solution!"; }