题意:给出一些点的度数,问使用所有点是否能形成图
思路:使用了Havel-Hakimi定理。
详细的定理解释借鉴学长的一篇博客 Havel-Hakimi定理
#include
#include
#include
#include
using namespace std; const int MAXN = 10005; int n, arr[MAXN]; int cmp(int a, int b) { return a > b; } int Havel_Hakimi() { for (int i = 0; i < n; i++) { sort(arr + i, arr + n, cmp); if (arr[i] > n - 1 - i) return 0; for (int j = i + 1; j <= i + arr[i]; j++) { arr[j]--; if (arr[j] < 0) return 0; } } return 1; } int main() { while (scanf("%d", &n) && n) { for (int i = 0; i < n; i++) scanf("%d", &arr[i]); if (Havel_Hakimi()) printf("Possible\n"); else printf("Not possible\n"); } return 0; }