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
    没有梦想,何谈远方
  • 相关阅读:
    windows系统下强制杀死某个进程
    onenote快捷键
    sublime封装代码块快捷键、eemet插件安装、Loading PyV8 binary...的解决办法
    google浏览器截长图的方法
    (转)Java基础加强之并发(二)常用的多线程实现方式
    hibernate学习(初识)
    Spring中的事务操作
    JDBC最原始的代码做查询操作
    Spring的JDBC模板
    Spring AOP
  • 原文地址:https://www.cnblogs.com/zyue/p/3139290.html
Copyright © 2011-2022 走看看