• 欧拉路径问题


    我这个只是模板啦。。。用的fleury算法。。。

    当然也可以DFS求路径。。。原理感觉一样,只不过这更高效吧。。

    #include<cstdio>
    #include<cstring>
    
    
    int n,m;
    int e[100][100];
    int top;
    int stack[100];
    void dfs(int x){
        top ++;
        stack[top] = x;
        for(int i = 1; i <= n; i ++){
            if(e[x][i] > 0){
                e[i][x] = e[x][i] = 0;//删除此边
                dfs(i);
                break;
            }
        }
    }
    void fleury(int x){
        top = 0;
        stack[top] = x;
        while(top >= 0){
            int b = 0;
            for(int i = 1; i <= n; i ++){
                if(e[stack[top]][i] > 0){
                    b=1;
                    break;
                }
            }
            if(b == 0){//如果没有可以扩展就输出并出栈
                printf("%d->",stack[top]);
                top--;
            }
            else{
                top--;
                dfs(stack[top+1]);
            }
        }
        puts("");
    }
    int main()
    {
        int degree, num, start;//顶点的度,奇度顶点个数,欧拉回路的起点
        while(~scanf("%d%d", &n, &m)){
            memset(e, 0, sizeof(0));
            for(int i = 0; i < m; i ++){
                int s, t;
                scanf("%d%d", &s, &t);
                e[s][t] = e[t][s] = 1;
            }
            num = 0, start = 1;
            //如果存在奇度顶点,则从奇度顶点出发,否则从顶点0出发
            for(int i = 1; i <= n; i ++){
                degree = 0;
                for(int j = 1; j <= n; j ++){
                    degree += e[i][j];
                }
                if(degree%2) start = i, num++;
            }
            if(num == 0||num == 2) fleury(start);
            else
                puts("no");
        }
        return 0;
    }
    /*
    9 14
    1 2
    1 8
    2 3
    2 8
    2 9
    3 4
    4 5
    4 6
    4 9
    5 6
    6 7
    6 9
    7 8
    8 9
    
    7 11
    1 5
    1 4
    7 3
    7 5
    7 6
    7 2
    5 6
    5 2
    4 2
    4 3
    4 6
    
    */

    遗憾的是,我做POJ上一个题的时候没有做出来。。。这几天也不想再去想那个题了,那是个好题,过一阵子再去自己写出来吧

  • 相关阅读:
    RabbitMQ资料
    在网页打开本地程序的思路
    HttpClient的巨坑
    webbrowser设置为相应的IE版本
    cpupower:Shows and sets processor power related values
    golang 国内环境配置
    OSX 创建 randisk(或称 tmpfs)
    Gentoo 搭遗
    ubuntu 去除开机背景
    fabric && cita 调研对比
  • 原文地址:https://www.cnblogs.com/louzhang/p/2628365.html
Copyright © 2020-2023  润新知