都忘了欧拉路径是什么了。。
用dfs搜 标记边 刚开始直接从I-N搜 直接超时 2了 先找符合起点和终点的点搜 即度数是奇数
d单dfs也超了 后来换了个姿势。。
1 /* 2 ID: shangca2 3 LANG: C++ 4 TASK: fence 5 */ 6 #include <iostream> 7 #include<cstdio> 8 #include<cstring> 9 #include<algorithm> 10 #include<stdlib.h> 11 using namespace std; 12 int w[510][510],n,p[2010],flag,m,de[510],t; 13 void dfs(int u,int d) 14 { 15 for(int v = 1; v <= m ; v++) 16 { 17 if(w[u][v]) 18 { 19 w[u][v]--; 20 w[v][u]--; 21 dfs(v,d+1); 22 } 23 } 24 p[t++] = u; 25 return ; 26 } 27 int main() 28 { 29 freopen("fence.in","r",stdin); 30 freopen("fence.out","w",stdout); 31 int i,u,v,st; 32 cin>>n; 33 m = 0; 34 for(i= 1; i <= n ; i++) 35 { 36 scanf("%d%d",&u,&v); 37 m = max(m,max(u,v)); 38 de[u]++; 39 de[v]++; 40 w[u][v]++; 41 w[v][u]++; 42 } 43 int f = 1; 44 for(i = 1; i <= m ; i++) 45 { 46 if(de[i]%2!=0) 47 { 48 st = i; 49 break; 50 } 51 if(f&&de[i]) 52 { 53 f = 0; 54 st = i; 55 } 56 } 57 dfs(st,1); 58 for(i = t-1; i >= 0 ; i--) 59 printf("%d\n",p[i]); 60 return 0; 61 }