zoukankan      html  css  js  c++  java
  • code2039 骑马修栏杆

    欧拉通路:

    find_circuit(结点i){

          当结点i有邻居时

        选择任意一个邻居j;

        删除边(i,j)或者做访问标记;

        find_circuit(结点j);

          输出或存储节点i;

     }

    本题注意点的编号可能是不连续的,处理n为最大的点的编号,以后循环1到n即可(尽管1到n不是每一个都有实际意义,但n<500)

    本题要求字典序最小,如果你的循环是从1到n的,那要用栈存储,最后一起输出

    或者把循环倒过来跑,但是WA,可能是问题没考虑到...

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<cstdio>
    #include<stack>
    #define Size 505
    using namespace std;
    
    stack<int> ss;
    int n,m=0;
    int g[Size][Size];
    int du[Size];
    
    void find(int x){
        //cout<<x<<endl;
        for(int i=1;i<=n;i++){
            if(g[x][i]>0){
                g[x][i]--; g[i][x]--;
                find(i);
            }
        }
        ss.push(x);
    }
    
    int main(){
        cin>>m;
        int a,b;
        for(int i=1;i<=m;i++){
            cin>>a>>b;
            n=max(n,a); n=max(n,b);
            g[a][b]++;du[a]++;
            g[b][a]++;du[b]++;
        }
        int st=0;
        for(int i=1;i<=n;i++){
            if(du[i]%2){
                st=i;
                break;
            }
        }
        if(st==0){
            for(int i=1;i<=n;i++)if(du[i]){
                st=i; break;
            }
        }
        find(st);
        while(!ss.empty()){
            printf("%d
    ",ss.top());
            ss.pop();
        }
        return 0;
    }
  • 相关阅读:
    hadoop面试
    常用脚本
    1.kafka
    2.flink
    java面试
    Hbase 项目
    linux 2>&1 和 &的意思
    Jetbrains系列产品重置试用方法
    解决GitHub网页githubusercontent地址无法访问问题
    stylus 成熟的写法
  • 原文地址:https://www.cnblogs.com/FuTaimeng/p/5607050.html
Copyright © 2011-2022 走看看