zoukankan      html  css  js  c++  java
  • [筆記]歐拉路

    懶得寫前言


    板題:luogu P2731

    1.可能是歐拉路和歐拉迴路相套,但是歐拉迴路可以看成一個點,所以無所謂

    2.據題解中說求路徑的問題回溯時記錄結果倒序輸出比較穩妥,一定是符合條件的

    3.這道題好像應該記錄點的最大和最小值,不過不記最小也能過

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int maxm=1025;
    const int maxn=505;
    int n,maxx,minn=maxn;
    int a[maxn][maxn];//邻接矩阵 
    int ans[maxm+5],cnt,deg[maxn];
    void dfs(int x)
    {
        for(int i=1;i<=maxx;i++)//優先選擇小的遍歷 
        if(a[i][x]!=0){
            a[i][x]--;a[x][i]--;//把走過的路刪掉,不會重複走 
            dfs(i);
        }
        ans[++cnt]=x;//回溯時記錄,最后倒序输出應該是一定對的 
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1,x,y;i<=n;i++){
            scanf("%d%d",&x,&y);
            a[x][y]++;a[y][x]++;
            maxx=max(maxx,max(x,y));
            minn=min(minn,min(x,y));
            deg[x]++;deg[y]++;
        }
        for(int i=1;i<=maxx;i++)
        if(deg[i]&1){
            minn=i;break;//欧拉回路还是欧拉路 
        }
        dfs(minn);
    //    ans[++cnt]=minn;
        for(int i=cnt;i>=1;i--)
        printf("%d
    ",ans[i]);
    }
  • 相关阅读:
    哲学家进餐
    文件系统
    文件读写原理(转)
    数据库join种类
    http与https区别
    数字证书(转)
    B. Rebranding
    扩展欧几里德算法、证明及其应用
    CodeForces 7C Line
    UVALive 7147 World Cup
  • 原文地址:https://www.cnblogs.com/superminivan/p/10657025.html
Copyright © 2011-2022 走看看