题意:
给你一个度数序列,让你判定该序列能否表示一个图
思路:
Havel_Hakimi定理
参考:
http://blog.csdn.net/shuangde800/article/details/7857246
代码:
#include<iostream>
using namespace std;
int n;
int arr[10000];
int cmp(const void * a, const void * b)
{
if (*(int*)a > *(int*)b) return -1;
if (*(int*)a == *(int*)b) return 0;
if (*(int*)a < *(int*)b) return 1;
}
bool Havel_Hakimi() {
for (int i = 0; i < n; i++)
{
qsort(arr + i, n - i, sizeof(arr[0]), cmp);
if (i + arr[i] >= n)return false;
for (int j = i + 1; j <= i + arr[i]; ++j)
{
--arr[j];
if (arr[j] < 0)return false;
}
}
if (arr[n - 1] != 0)return false;
return true;
}
int main() {
//FILE*stream;
//freopen_s(&stream, "C:\\Data\\10720.txt", "r", stdin);
while (cin >> n&&n != 0)
{
for (int i = 0; i < n; i++)
cin >> arr[i];
if (Havel_Hakimi())
cout << "Possible" << endl;
else
cout << "not possible" << endl;
}
return 0;
}