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

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1184

    优先小节点搜欧拉道路,如果有奇数入度节点要从这个节点出发。

    注意从小到大在算法遍历里是1->n!!!!

    path输出来时是n->0!!!!            

    要是以为算法遍历里是n->1,path输出来时是0->n那就错了

    数据

    4
    2 3
    1 2
    3 1
    1 2

    会输出:2 1 2 3 1 错!!!!

    View Code
    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;

    int map1[599][599];
    int path[599];
    int du[1099];


    void find_path_u(int n,int mat[][599],int now,int &step,int *path)
    {
    int i;
    for(i=1;i<=n;i++)//从小到大
    {
    while(mat[now][i])
    {
    mat[now][i]--,mat[i][now]--;
    find_path_u(n,mat,i,step,path);
    }
    }
    path[step++]=now;
    }

    int olpath(int n,int mat[][599],int start,int *path)
    {
    int ret=0;
    find_path_u(n,mat,start,ret,path);
    return ret;
    }

    int main()
    {
    int n;
    while(scanf("%d",&n)!=EOF)
    {
    memset(map1,0,sizeof(map1));//map注意初始化!!
    memset(du,0,sizeof(du));
    int i;
    int x,y;
    int max=0;
    for(i=1;i<=n;i++)
    {
    scanf("%d%d",&x,&y);
    du[x]++;
    du[y]++;
    if(max<x)max=x;
    if(max<y)max=y;
    map1[x][y]++;
    map1[y][x]++;
    }

    int min=0;
    for(i=1;i<=max;i++)
    {
    if(du[i]%2==1)
    {
    min=i;
    break;
    }
    }

    if(min==0)
    for(i=1;i<=max;i++)
    {
    if(du[i]>0)
    {
    min=i;
    break;
    }
    }

    olpath(max,map1,min,path);
    for(i=n;i>=0;i--)
    {
    printf("%d\n",path[i]);
    }
    }

    return 0;
    }



  • 相关阅读:
    Delete Them
    Toda 2
    JQuery案例:购物车加减
    JQuery案例:折叠菜单
    JQuery案例:暖心小广告
    JQuery案例:左右选
    JQuery动画
    JQuery切换事件
    JQuery文档操作
    JQuery选择器
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2405092.html
Copyright © 2011-2022 走看看