原定理:
如果给定了n个数a1,a2,……,an,那么是否有可能是某一个图结点的度数呢?
为了尽量构成一个连通图,我们首先考虑其中度数最多的点,为了解决其连接问题,我们考虑两种情况:
1.连接度数较少的点
2.连接度数较多的点
2方法有一个明显的好处,就是“尽量保存多的点",它的作用就是能够保证之后的数字无论多大,都存在足够多的点与其相抵消,而且因为是消除大数字的点,也有很大的削弱大数字的效果。
所以方法就是进行递归操作。
一下是代码:
#include <vector>
using namespace std;
bool cn(vector<int>& vi) {
if(vi[0] == true) return true;
for(int i = 1; i < vi.size(); i++) {
vi[i]--;
if(v[i] < 0) return false;
}
vi.erase(vi.begin(), vi.begin() + 1);
return cn(vi);
}
bool judge_connect(vector<int> vi) {
sort(vi.begin(), vi.end());
return cn(vi);
}