Yoo_ @ 2019-01-22 21:55:05
我的代码
#include <cstdio>
#include <iostream>
using namespace std;
const int N=5005;
const int M=5005;
int g[N][N],head[N],Next[M],to[M],cnt=1,S=N,m,in[N];
void add(int u,int v)
{
Next[++cnt]=head[u];
to[cnt]=v;
head[u]=cnt;
}
int s[M],tot,vis[M];
void dfs(int now)
{
for(int i=head[now];i;i=Next[i])
{
if(!vis[i])
{
vis[i]=1;
vis[i^1]=1;
head[now]=Next[i];
dfs(to[i]);
}
}
s[++tot]=now;
}
int main()
{
scanf("%d",&m);
int u,v;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&u,&v);
if(u>v){
swap(u,v);
}
g[u][v]++;
in[v]++,in[u]++;
S=S<u?S:u;
}
int maxA=500,maxB=500;
while(maxA--){
if(in[maxA]&1){
S=maxA;
}
}
maxA=500;
while(maxA--){
while(maxB--)
{
while(g[maxA][maxB]--)
add(maxA,maxB),add(maxB,maxA);
}
}
dfs(S);
while(tot--){
printf("%d\n",s[tot]);
}
return 0;
}
by Yoo_ @ 2019-01-22 21:55:19
求助大佬
by 一飞冲天666 @ 2019-01-22 22:08:16
@我的智商贼低 哈哈哈
by 施一公 @ 2019-03-09 11:39:59
@我的智商贼低
#include<bits/stdc++.h>
using namespace std;
int G[101][101];
int du[101]
int n,m,tot;
int ans[510];
void dfs(int x){
for(int i=1;i<=m;i++){
if(G[x][i]>0){
G[x][i]--
G[i][x]--;
dfs(i);
}
}
ans[++tot]=x;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int x,y;
cin>>x>>y;
G[x][y]++
G[y][x]++;
du[x]++
du[y]++;
m=max(max(x,m),y);
}
int p=1,cnt=0,flag=1;
for(int i=1;i<=m;i++){
if(du[i]%2==1){
cnt++
if(flag){
p=i;
flag=0
}
p=i;
break;
}
}
// if(cnt>2){
// cout<<"no"
// return;
// }
dfs(p);
for(int i=tot;i>1;i--){
cout<<ans[i]<<endl;
}
return 0;
}
希望更丰富的展现?使用Markdown
by 施一公 @ 2019-03-09 11:43:58
@我的智商贼低 有坑勿喷,自己编译运行一下就好了
by Yoo_ @ 2019-03-09 11:44:20
@施一公 ...
by 施一公 @ 2019-03-09 11:50:05
希望更丰富的展现?使用Markdown