欧拉图

什么都不说了,上代码

#include
using namespace std;
const int maxn=1e3+7;
int v,e,top;
int ans[maxn*7];
int mp[maxn][maxn];
void dfs(int x)//递归可走的边
{
    ans[++top]=x;
    for(int i=1;i<=v;i++){
        if(mp[x][i]>0){
            mp[x][i]=0;
            mp[i][x]=0;
            dfs(i);
            break;
        }
    }
}
void fleury(int x)
{
    top=1;
    ans[top]=x;
    while(top>0)
    {
        bool ok=false;
        for(int i=1;i<=v;i++){//判断是否可有路
            if(mp[ans[top]][i]>0){
                ok=true;
                break;
            }
        }
        if(ok){
            top--;//为了回溯
            dfs(ans[top+1]);
        }
        else{
            cout<>v>>e)
    {
        memset(mp,0,sizeof(mp));
        for(int i=1;i<=e;i++){
            int vi,vj;
            cin>>vi>>vj;
            mp[vi][vj]=1;
            mp[vj][vi]=1;
        }
        int pos=1;//flag标记开始点
        int p=0;
        for(int i=1;i<=v;i++){
            int d=0;
            for(int j=1;j<=v;j++)
                d+=mp[i][j];
            if(d%2){
                p++;
                pos=i;//若有奇数边,从奇数边开始搜
            }
        }
        if(p==0){
            cout<<"欧拉回路:";
            fleury(pos);
        }
        else if(p==2){
            cout<<"欧拉通路:";
            fleury(flag);
        }
        else{
            cout<<"无欧拉性";
        }
    }
    return 0;
}

你可能感兴趣的:(基础,jichu)