这道题我错哪了也不知道,好崩溃
题目如下这个老师是真的懒,题写的特短:
题目描述
输入一个无向连通图的,判断这个图是否存在欧拉回路,如果没有则输出“no oula circle”,如果有,输出以顶点1开始的一条欧拉回路,回路上顶点序号优先小的
输入
第一行一个整数n和k,表示这个图有n个顶点、k条边,接下来k行,每行两个整数ai和aj,表示顶点ai和aj之间有一条边
输出
如果不存在欧拉回路,请输出“no oula circle”,如果有欧拉回路,请输出顶点1开始的欧拉回路的顶点编号
现在,亮出本蒟蒻的代码写的不好的话望大佬理解:
#include<bits/stdc++.h>
using namespace std;
int du[10001];
int n,m,cnt=0,jj=1,d=0,le,o=0;
int a[5001][5001];
int r[10001];
void dd(int q){
r[o++]=q;
if(le==0){
d=1;
return;
}
le--;
for(int i=1;i<=n;i++){
if(a[q][i]==1){
a[q][i]=0;
a[i][q]=0;
dd(i);
if(d)return;
a[i][q]=1;
a[q][i]=1;
}
}
o--;
le++;
}
int main()
{
cin>>n>>m;
for(int j=1;j<=m;j++)
{
int x,y;
cin>>x>>y;
a[x][y]=1;
a[y][x]=1;
du[x]+=1;
du[y]+=1;
}
for(int j=1;j<=n;j++){
if(du[j]==0){
cout<<"no oula circle";
return 0;
}
if(du[j]%2==1){
cnt++;
jj=j;
}
}
if(cnt>2){
cout<<"no oula circle";
return 0;
}
le=m;
dd(jj);
for(int i=0;i<o;i++)cout<<r[i]<<' ';
return 0;
}
谢谢各位大佬的支持与帮助!