zoukankan      html  css  js  c++  java
  • Frogs‘ Neighborhood(POJ 1659 C/C++)

    poj 1659

    Description

    未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ iN)。如果湖泊LiLj之间有水路相连,则青蛙FiFj互称为邻居。现在已知每只青蛙的邻居数目x1, x2, ..., xn,请你给出每两个湖泊之间的相连关系。

    Input

    第一行是测试数据的组数T(0 ≤ T ≤ 20)。每组数据包括两行,第一行是整数N(2 < N < 10),第二行是N个整数,x1, x2,..., xn(0 ≤ xiN)。

    Output

    对输入的每组测试数据,如果不存在可能的相连关系,输出"NO"。否则输出"YES",并用N×N的矩阵表示湖泊间的相邻关系,即如果湖泊i与湖泊j之间有水路相连,则第i行的第j个数字为1,否则为0。每两个数字之间输出一个空格。如果存在多种可能,只需给出一种符合条件的情形。相邻两组测试数据之间输出一个空行。

    Sample Input

    3
    7
    4 3 1 5 4 2 1 
    6
    4 3 1 4 2 0 
    6
    2 3 1 1 2 1 
    

    Sample Output

    YES
    0 1 0 1 1 0 1 
    1 0 0 1 1 0 0 
    0 0 0 1 0 0 0 
    1 1 1 0 1 1 0 
    1 1 0 1 0 1 0 
    0 0 0 1 1 0 0 
    1 0 0 0 0 0 0 
    
    NO
    
    YES
    0 1 0 0 1 0 
    1 0 0 1 1 0 
    0 0 0 0 0 1 
    0 1 0 0 0 0 
    1 1 0 0 0 0 
    0 0 1 0 0 0 
    

    提示:Havel-Hakimi定理

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <memory.h>
    
    using namespace std;
    
    const int maxn = 12;
    
    class Pair
    {
    public: 
    	int m_id;
    	int val;
    };
    
    bool cmp(Pair a, Pair b)
    {
    	return a.val > b.val;
    }
    
    int main()
    {
    	Pair p[maxn];
    	int ans[maxn][maxn];
    	int T;
    	scanf("%d", &T);
    	while (T--)
    	{
    		int n;
    		scanf("%d", &n);
    		for (int i = 0; i < n; i++)
    		{
    			p[i].m_id = i + 1;
    			scanf("%d", &p[i].val);
    		}
    		memset(ans, 0, sizeof(ans));
    		bool flag = true;
    		int num = n;
    		while (num--)
    		{
    			sort(p, p + n, cmp);
    			if (p[0].val == 0)
    				break;
    			for (int i = 1; i <= p[0].val; i++)
    			{
    				if (p[i].val > 0 && i < n)
    				{
    					ans[p[0].m_id][p[i].m_id] = ans[p[i].m_id][p[0].m_id] = 1;
    					p[i].val--;
    				}
    				else
    				{
    					flag = false;
    					break;
    				}
    			}
    			if (!flag)
    				break;
    			p[0].val = 0;
    		}
    		if (flag)
    		{
    			puts("YES");
    			for (int i = 1; i <= n; i++)
    			{
    				for (int j = 1; j <= n; j++)
    				{
    					if (j == 1)
    						printf("%d", ans[i][j]);
    					else
    						printf(" %d", ans[i][j]);
    				}
    				putchar('
    ');
    			}
    		}
    		else
    			puts("NO");
    		if (T > 0)
    			putchar('
    ');
    	}
    	return 0;
    }
    
  • 相关阅读:
    nginx 点播mp4方法
    NGINX 添加MP4、FLV视频支持模块
    用nginx搭建基于rtmp或者http的flv、mp4流媒体服务器
    obs nginx-rtmp-module搭建流媒体服务器实现直播 ding
    利用nginx搭建RTMP视频点播、直播、HLS服务器
    使用nginx搭建媒体点播服务器
    nginx支持flv MP4 扩展nginx_mod_h264_streaming,nginx-rtmp-module-master,yamdi
    the odb manual
    Zookeeper——启动闪退
    Zookeeper之启动常见错误及解决方法
  • 原文地址:https://www.cnblogs.com/yanhua-tj/p/13996569.html
Copyright © 2011-2022 走看看