zoukankan      html  css  js  c++  java
  • UVA

    https://vjudge.net/problem/UVA-10054

    题意分析:

    有一条项链,每两个相邻的珠子颜色相同, 如 绿红 红白 白绿 绿蓝 蓝绿 末尾和开头也要验收相同

    项链断了,只找到部分珠子,问这些珠子能不能构成一条符合条件的项链。

    解题思路:

    先判断图是否为欧拉回路,即所有的点入度是否为偶数,也就是颜色出现的次数是否都为偶数,如果是,就可以穿成项链。

    再任意找一个度不为0的点递归输出即可。

    for (v = 1; v <= N; v++)
    {
    	if (e[u][v]> 0)
    	{
    		e[u][v]--;
    		e[v][u]--;
    		printf("%d %d
    ", u, v);
    		OL(v);
    	}
    }

    上面这样写是错的,如以下样例:
    6
    2 3
    3 4
    4 2
    4 1
    2 1
    4 2

    #include <stdio.h>
    #include <string.h>
    #define N 55
    int e[N][N], degree[N], n;
    void OL(int u)
    {
    	int v;
    	for (v = 1; v <= N; v++)
    	{
    		if (e[u][v]> 0)
    		{
    			e[u][v]--;
    			e[v][u]--;
    			printf("%d %d
    ", u, v);
    			OL(v);
    		}
    	}
    }
    int main()
    {
    	int t=0, T, i, u, v, temp;
    	scanf("%d", &T);
    	while (T--)
    	{
    		memset(degree, 0, sizeof(degree));
    		memset(e, 0, sizeof(e));
    		scanf("%d", &n);
    		for (i = 0; i < n; i++)
    		{
    			scanf("%d%d", &u, &v);
    			e[u][v]++;
    			e[v][u]++;
    			degree[u]++;
    			degree[v]++;
    		}
    		temp = 1;
    		for(i=1; i< N; i++)
    			if (degree[i] % 2 == 1)
    			{
    				temp = 0;
    				break;
    			}
    		printf("Case #%d
    ", ++t);
    		if (temp == 0)
    			printf("some beads may be lost
    ");
    		else {
    			for (i = 1; i < N; i++)
    				if (degree[i])
    					OL(i);
    		}
    		printf("
    ");
    	}
    	return 0;
    }
  • 相关阅读:
    Shell基础一
    Hash表
    哈希表
    设置不输入密码ssh登录
    C++ int与string的转化
    mysql之数据类型
    ICE之C/S通信原理
    mysql基础入门
    SQL练习之不反复执行相同的计算
    SQL练习之求解填字游戏
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/11852589.html
Copyright © 2011-2022 走看看