一笔画问题
l样例输入:第一行n,m,有n个点,m条边,以下m行描述每条边连接的两点。
l 5 5
l 1 2
l 2 3
l 3 4
l 4 5
l 5 1
l样例输出:欧拉路或欧拉回路
l 1 5 4 3 2 1
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int map[1001][1001]; 5 int tj[10001]; 6 int vis[1001]; 7 int n,m; 8 int ans[1001]; 9 int now=1; 10 int flag=1; 11 void dfs(int i) { 12 //cout<<p<<" "; 13 for(int j=1; j<=n; j++) 14 { 15 if(map[i][j]==1) 16 { 17 map[j][i]=map[i][j]=0; 18 dfs(j); 19 } 20 } 21 ans[now]=i; 22 now++; 23 } 24 int main() 25 { 26 27 scanf("%d%d",&n,&m); 28 for(int i=1; i<=m; i++) 29 { 30 int x,y; 31 scanf("%d%d",&x,&y); 32 map[y][x]=map[x][y]=1; 33 tj[x]++; 34 tj[y]++; 35 } 36 flag=1; 37 for(int i=1; i<=n; i++) 38 if(tj[i]%2==1) 39 { 40 flag=i; 41 } 42 dfs(flag); 43 for(int i=1; i<=now-1; i++) 44 cout<<ans[i]<<" "; 45 return 0; 46 }
作者:自为风月马前卒
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。