zoukankan      html  css  js  c++  java
  • 欧拉路

    一、基本概念:

    欧拉路:欧拉路是指从图中任意一个点开始到图中任意一个点结束的路径,并且图中每条边通过的且只通过一次

    欧拉回路:欧拉回路是指起点和终点相同的欧拉路。


    二、存在欧拉路的条件:

    1.无向连通图存在欧拉路的条件:

    所有点度都是偶数,或者恰好有两个点度是奇数,则有欧拉路。若有奇数点度,则奇数点度点一定是欧拉路的起点和终点,否则可取任意一点作为起点。

    2.有向连通图存在欧拉路的条件:

    • 每个点的入度等于出度,则存在欧拉回路(任意一点有度的点都可以作为起点)
    • 除两点外,所有入度等于出度。这两点中一点的出度比入度大,另一点的出度比入度小,则存在欧拉路。取出度大者为起点,入度大者为终点。

    代码

    #include <bits/stdc++.h>
    #define M 1005
    using namespace std;
    int i,j,n,m,arr[M][M],numm,vis,ans[100000],sp,beginn=1,r;
    void dfs(int k)
    {
        for(int ii=1;ii<=n;ii++)
        {
            if(arr[k][ii]==1)
            {
                arr[k][ii]=0;
                arr[ii][k]=0;
                dfs(ii);    
            }
        }   
        ans[numm++]=k;
    }
    int main(){
        scanf("%d",&n);
        for(i=1;i<=n;i++)
        {   sp=0;
            for(j=1;j<=n;j++)
            {   
                cin>>arr[i][j];
                if(arr[i][j]==1)
                sp++;
            }
            if(sp%2==1&&r==0)
            beginn=i;
            if(sp%2==1)
            r++;
        }
       if(r==0||r==2)
    {
        dfs(beginn);
        for(i=numm-1;i>=0;i--)
        {    if(i!=numm-1) cout<<" ";
              cout<<ans[i];
        }
    }
     else cout<<"No Solution!";
    }
    View Code
  • 相关阅读:
    jQuery
    jQuery
    jQuery Callback 函数
    怎样提高团队管理能力4
    poj 3461 Oulipo(KMP模板题)
    每日一小练——按字典顺序列出全部排列
    Java数据结构与算法之排序
    China Vis 2015 会议小结
    网络基础知识小小说
    NS3网络仿真(7): Wifi节点
  • 原文地址:https://www.cnblogs.com/Lamboofhome/p/11841144.html
Copyright © 2011-2022 走看看