zoukankan      html  css  js  c++  java
  • UVA 10054 The Necklace

    UVA_10054

    这个题目实际上就是找一条欧拉回路并打印出路径即可,可以参考刘汝佳白书P112的代码,只要在这个代码的基础上稍作修改即可。

    当然,由于这个题目是无向图,我就直接反向打印的道路,如果是有向图的话,只要把printf改成压栈的操作即可,最后从栈顶开始依次输出(u,v)

    #include<stdio.h>
    #include
    <string.h>
    int G[60][60],dgr[60],p[60];
    int find(int x)
    {
    return p[x]==x?x:(p[x]=find(p[x]));
    }
    int dfs(int u)
    {
    int v;
    for(v=1;v<=50;v++)
    if(G[u][v])
    {
    G[u][v]
    --;
    G[v][u]
    --;
    dfs(v);
    printf(
    "%d %d\n",v,u);
    }
    }
    int main()
    {
    int i,j,k,t,tt,u,v,n,ok;
    scanf(
    "%d",&t);
    for(tt=0;tt<t;tt++)
    {
    scanf(
    "%d",&n);
    memset(G,
    0,sizeof(G));
    memset(dgr,
    0,sizeof(dgr));
    for(i=1;i<=50;i++)
    p[i]
    =i;
    for(i=0;i<n;i++)
    {
    scanf(
    "%d%d",&u,&v);
    dgr[u]
    ++;
    dgr[v]
    ++;
    G[u][v]
    ++;
    G[v][u]
    ++;
    if(find(u)!=find(v))
    p[find(u)]
    =find(v);
    }
    ok
    =1;
    for(i=0;!dgr[i];i++);
    for(j=i+1;j<=50;j++)
    if(dgr[j]&&find(i)!=find(j))
    {
    ok
    =0;
    break;
    }
    if(ok)
    for(i=1;i<=50;i++)
    if(dgr[i]%2!=0)
    {
    ok
    =0;
    break;
    }
    if(tt)
    printf(
    "\n");
    printf(
    "Case #%d\n",tt+1);
    if(!ok)
    printf(
    "some beads may be lost\n");
    else
    {
    for(u=0;!dgr[u];u++);
    dfs(u);
    }
    }
    return 0;
    }

      

  • 相关阅读:
    Js 之获取QueryString的几种方法
    Go语言 之md5加密
    跨域取文件(跨项目)
    System.IO
    System.Threading.Tasks
    JS存取Cookies值,附自己写的获取cookies的一个方法
    HttpServerUtility 和 HttpUyility
    JS格式化时间
    JS获取页面传过来的值
    Navigator 对象
  • 原文地址:https://www.cnblogs.com/staginner/p/2172526.html
Copyright © 2011-2022 走看看