输入一个无向连通图的,判断这个图是否存在欧拉回路,如果没有则输出“no oula circle”,如果有,输出以顶点1开始的一条欧拉回路,回路上顶点序号优先小的
输入
第一行一个整数n和k,表示这个图有n个顶点、k条边,接下来k行,每行两个整数ai和aj,表示顶点ai和aj之间有一条边
输出
如果不存在欧拉回路,请输出“no oula circle”,如果有欧拉回路,请输出顶点1开始的欧拉回路的顶点编号
AC代码,这题真的难:
#include<bits/stdc++.h>
using namespace std;
int n,m,arr[101][101],vis[101][101],dot[101],ans[101],flag;
void dfs(int x,int cnt){
if(flag) return;
ans[cnt]=x;
if(cnt>m){
flag=true;
return;
}
for(int i=1;i<=n;i++){
if(arr[x][i]==1 && !vis[x][i]){
vis[x][i]=vis[i][x]=1;
dfs(i,cnt+1);
vis[x][i]=vis[i][x]=0;
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int a,b;
cin>>a>>b;
dot[a]++;
dot[b]++;
arr[a][b]=arr[b][a]=1;
}
for(int i=1;i<=n;i++){
if(dot[i]%2==1){
cout<<"no oula circle";
return 0;
}
}
dfs(1,1);
for(int i=1;i<=m+1;i++){
cout<<ans[i]<<" ";
}
return 0;
}
OJ题目陆续收录中。。。