一、基本概念:
欧拉路:欧拉路是指从图中任意一个点开始到图中任意一个点结束的路径,并且图中每条边通过的且只通过一次。
欧拉回路:欧拉回路是指起点和终点相同的欧拉路。
二、存在欧拉路的条件:
1.无向连通图存在欧拉路的条件:
2.有向连通图存在欧拉路的条件:
- 每个点的入度等于出度,则存在欧拉回路(任意一点有度的点都可以作为起点)
- 除两点外,所有入度等于出度。这两点中一点的出度比入度大,另一点的出度比入度小,则存在欧拉路。取出度大者为起点,入度大者为终点。
代码
#include <bits/stdc++.h> #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!"; }