Jun
8
WHUACM 20080608 Day4个人赛C题
描述:给出图的顶点数以及每个顶点的度数(每两个顶点之间最多只有一条边),证明该图的存在性。
证明:
将图的顶点按度数排序,找到度数最大的顶点(设度数为n0)
去掉这个顶点,同时使接下来n0个顶点的顶点数减一。
重复上述步骤,直至剩余顶点的度数都为0,则图存在,否则图不存在。
C代码:
转载请注明出自 ,如是转载文则注明原出处,谢谢:)
RSS订阅地址: https://www.felix021.com/blog/feed.php 。
描述:给出图的顶点数以及每个顶点的度数(每两个顶点之间最多只有一条边),证明该图的存在性。
证明:
将图的顶点按度数排序,找到度数最大的顶点(设度数为n0)
去掉这个顶点,同时使接下来n0个顶点的顶点数减一。
重复上述步骤,直至剩余顶点的度数都为0,则图存在,否则图不存在。
C代码:
#include<stdio.h>
int d[1010];
void qsort(int a[], int s, int e);
int main(){
int n, i, j, sum;
scanf("%d", &n);//输入顶点数
sum = 0;
for(i = 0; i < n; i++){
scanf("%d", &d[i]);//输入每个顶点的度数
sum += d[i];
}
if(sum % 2 == 1){ //如果总度数为奇数,就不存在
printf("NO\n");
return 0;
}
qsort(d, 0, n-1);//先排序
for(i = n - 1; i >= 0; i--){
if(d[i] > i){ //如果最大度数大于剩余顶点数 就不存在
printf("NO\n");
return 0;
}else{//否则去掉最大的顶点
for(j = 0; j < d[i]; j++){
d[i-j-1]--;
if(d[i-j-1] < 0){//如果出现负度数 就不存在
printf("NO\n");
return 0;
}
}
qsort(d, 0, i - 1);//再次排序
}
}
printf("YES\n");//满足所有条件,存在
return 0;
}
void qsort(int a[], int s, int e){
int i = s, j = e, temp = a[s];
if(s < e){
while(i != j){
while(a[j] > temp && i < j) j--;
if(i < j) a[i++] = a[j];
while(a[i] < temp && i < j) i++;
if(i < j) a[j--] = a[i];
}
a[i] = temp;
qsort(a, s, i-1);
qsort(a, i+1, e);
}
}
int d[1010];
void qsort(int a[], int s, int e);
int main(){
int n, i, j, sum;
scanf("%d", &n);//输入顶点数
sum = 0;
for(i = 0; i < n; i++){
scanf("%d", &d[i]);//输入每个顶点的度数
sum += d[i];
}
if(sum % 2 == 1){ //如果总度数为奇数,就不存在
printf("NO\n");
return 0;
}
qsort(d, 0, n-1);//先排序
for(i = n - 1; i >= 0; i--){
if(d[i] > i){ //如果最大度数大于剩余顶点数 就不存在
printf("NO\n");
return 0;
}else{//否则去掉最大的顶点
for(j = 0; j < d[i]; j++){
d[i-j-1]--;
if(d[i-j-1] < 0){//如果出现负度数 就不存在
printf("NO\n");
return 0;
}
}
qsort(d, 0, i - 1);//再次排序
}
}
printf("YES\n");//满足所有条件,存在
return 0;
}
void qsort(int a[], int s, int e){
int i = s, j = e, temp = a[s];
if(s < e){
while(i != j){
while(a[j] > temp && i < j) j--;
if(i < j) a[i++] = a[j];
while(a[i] < temp && i < j) i++;
if(i < j) a[j--] = a[i];
}
a[i] = temp;
qsort(a, s, i-1);
qsort(a, i+1, e);
}
}
欢迎扫码关注:
转载请注明出自 ,如是转载文则注明原出处,谢谢:)
RSS订阅地址: https://www.felix021.com/blog/feed.php 。