Problem Description
若把图G所有顶点的度数排成一个序列s,则称s为图G的度序列.例如一个无向图非递减度序列为
s:5,4,3,3,2,1
如果一个非负数整数组成的有限序列是某个无向图的度序列,则称该序列是可图的.现在,判定一个序列是否可图.
s:5,4,3,3,2,1
如果一个非负数整数组成的有限序列是某个无向图的度序列,则称该序列是可图的.现在,判定一个序列是否可图.
Input
输入数据有多组,第一行输入一个t(t<100),表示有t组测试数据,每组测试数据有一个n(n<30),接下来是n个整数,x1,x2,x3...xn(0<=xi<=n).
Output
对输入的每组测试数据,如果该序列是可图的,则输出yes,否则输出no.
Sample Input
3 6 5 4 3 3 2 1 7 4 3 1 5 4 2 1 6 4 3 1 4 2 0
Sample Output
yes yes no
来自OJ:http://acm.fjzs.edu.cn/Problem/show/id/1019.htm
解题思路:
1.对数组进行降序排序
2.然后删除第一个数a[0],并判断
一、该数a[0]是否大于后面的顶点数(即总个数n-1[表示剩余个数]) 【if no则不可图】;
二、对该数后面a[0]个数进行减1,并判断最后一个减1的数是否小于0【if no则不可图】;
3.重复上述操作1和2,直到全部数据为0。【if yes 则可图】
(详细过程推荐看:http://sbp810050504.blog.51cto.com/2799422/883904)
代码如下(C++):
#include<stdio.h> #include<iostream> #include<algorithm> #include<math.h> using namespace std; bool