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

    题意:一串节点项链,每一个节点两头有颜色,后一个节点都头颜色一定要和前一个节点的尾颜色相等,给你n个节点,问你是否能组成项链。。如果能,输出序列

    解题思路:典型的欧拉回路判断,关键是输出,没有递归输出错了,递归输出却对了 我觉得应该是uva special juage的问题吧。。

    解题代码:

    // File Name: uva10596.c
    // Author: darkdream
    // Created Time: 2013年06月15日 星期六 20时44分39秒
    
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<time.h>
    #include<math.h>
    int map[204][204];
    int kk[204];
    int visit[204];
    void dfs(int k )
    {
        for(int i = 0 ;i <= 55;i ++)
        {
            if(map[k][i] != 0  && visit[i] == 0)
            {     
                visit[i] = 1;
                dfs(i);
            }
        }
    
    }
    void dfs1(int k )
    {
        //printf("%d
    ",k);
        for(int  i = 0;i <= 55 ;i ++)
        {
            if(map[k][i] != 0)
            {
            //    printf("%d %d
    ",k,i);  为什么不能放在这里
                map[k][i]--;
                map[i][k]--;
                dfs1(i);
                            printf("%d %d
    ",i,k); //为什么一定要放在这里。。。    
            }
        }
    }
    int main(){
    
        //freopen("/home/plac/problem/input.txt","r",stdin);
        //freopen("/home/plac/problem/output.txt","w",stdout);
        int  t , m;
        scanf("%d",&t);
        for(int CASE = 1; CASE <= t; CASE ++)
        { 
    
            int a,  b;
            scanf("%d",&m);
            int ok = 1;
            memset(map,0,sizeof(map));
            memset(visit,0,sizeof(visit));
            memset(kk,0,sizeof(kk));
            while(m--)
            {
                scanf("%d %d",&a,&b);
                map[a][b]++ ;
                map[b][a]++;
                kk[a] ++;
                kk[b] ++;
            }
            for(int i = 0 ;i <= 55;i ++ )
            {
                if(kk[i] %2 == 1)
                    ok = 0;
            }
            if(ok)
            {
                visit[a] = 1;
                dfs(a);
                for(int  i = 0 ; i <= 55;i ++)
                    if( kk[i] != 0 &&  visit[i] == 0  )
                        ok = 0 ;
            }
            if(CASE  != 1 )
                printf("
    ");
            printf("Case #%d
    ",CASE);
            if( ok == 1)
            {
                dfs1(a);
            }
            else
                printf("some beads may be lost
    ");
        }
    
        return 0 ;
    }
    View Code
    没有梦想,何谈远方
  • 相关阅读:
    结构体struct和typedef后面接指针的含义
    C++中关于指针初始化和使用NULL的理解
    (虚)继承类的内存占用大小
    为什么构造函数不能为虚函数
    C++中变量自动初始化的问题
    CY7C68013A的一点总结
    Altium designer总结
    在Linux系统上限制远程登录的IP
    linux系统如何限制其他用户登录
    使用秘钥对登录Linux系统
  • 原文地址:https://www.cnblogs.com/zyue/p/3139290.html
Copyright © 2011-2022 走看看