1341:【例题】一笔画问题
代码如下:
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll N=4000;
ll n,m,x,y,p[N],cnt,sum,st=1;
bool f[N][N];
vector<ll>G[200];
void dfs(ll r) {
for(ll i=1;i<=n;i++)
if(f[r][i]){
f[r][i]=f[i][r]=0;
dfs(i);
}
p[cnt++]=r;
}
int main() {
scanf("%lld%lld",&n,&m);
while(m--){
scanf("%lld%lld",&x,&y);
G[x].push_back(y);
G[y].push_back(x);
f[x][y]=f[y][x]=1;
}
for(ll i=1;i<=n;i++)
if(G[i].size()%2){
sum++;
if(sum==1)st=i;
}
dfs(st);
for(ll i=cnt;i>0;i--)printf("%lld ",p[i-1]);
return 0;
}