zoukankan      html  css  js  c++  java
  • POJ1659:Frogs' Neighborhood(图论)

    http://poj.org/problem?id=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 
    

    1.找出最大边数的那个点。

    2.在和边数的相等的其他最大边数点之间连接一条线。

    3.连线的两个点边数各减一。

    4.重复1。

    直到所有点的边数都为0,符合条件,在此过程中如果有边数小于0或者边数大于或等于点数不符合条件。

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    #define N 20
    int ans[N][N];
    typedef struct data{
    	int num;
    	int s;
    }data;
    data a[N];
    int cmp(data a,data b)
    {
    	return a.s<b.s;
    }
    int main()
    {
    	int t,n,i,j,temp,m;
    	scanf("%d",&t);
    	while(t--)
    	{
    		memset(ans,0,sizeof(ans));
    		scanf("%d",&n);
    		m=n;
    		for(i=0;i<n;i++)
    		{
    			scanf("%d",&a[i].s);
    			a[i].num=i;
    		}
    		temp=1;
    		while(n)
    		{
    			sort(a,a+n,cmp);
    			if(a[n-1].s<0||a[n-1].s>=n)
    			{
    				temp=0;
    				break;
    			}
    			for(i=n-2;i>n-2-a[n-1].s;i--)
    			{
    				ans[a[i].num][a[n-1].num]=ans[a[n-1].num][a[i].num]=1;
    				a[i].s--;
    			}
    			n--;
    		}
    		if(temp==0)
    			printf("NO
    ");
    		else
    		{
    			printf("YES
    ");
    			for(i=0;i<m;i++)
    			{
    				for(j=0;j<m;j++)
    					printf("%d ",ans[i][j]);
    				printf("
    ");
    			}
    		}
    		printf("
    ");
    	}
    	return 0;
    }
  • 相关阅读:
    LeetCode 811. Subdomain Visit Count (子域名访问计数)
    LeetCode 884. Uncommon Words from Two Sentences (两句话中的不常见单词)
    LeetCode 939. Minimum Area Rectangle (最小面积矩形)
    LeetCode 781. Rabbits in Forest (森林中的兔子)
    LeetCode 739. Daily Temperatures (每日温度)
    三种方式实现按钮的点击事件
    239. Sliding Window Maximum
    14.TCP的坚持定时器和保活定时器
    13.TCP的超时与重传
    12.TCP的成块数据流
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/11852816.html
Copyright © 2011-2022 走看看