题意:给定你n个点 然后给定m条边 如果两个点之间有两个间接点且它两不直接连,那么它们两之间就产生一条新边 问你最后一共产生多少条新边
解题思路:数组模拟暴力 直到不产生新边停止循环
解题代码:
#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { int t ; scanf("%d",&t); while(t--) { int a[102][102]; int visit[102]; memset(a,0,sizeof(a)); int n , m , k; scanf("%d %d %d",&n,&m,&k); for(int i = 1;i <= m; i ++) { int tempa,tempb; scanf("%d %d",&tempa,&tempb); visit[tempa] = 1; visit[tempb] = 1; a[tempa][tempb] = 1; a[tempb][tempa] = 1; } int sum = 0 ; while(1) { int oktemp = 0; for(int i = 0 ;i < n;i ++) { if(visit[i]) for(int j = i+1; j < n; j ++) if(a[i][j] == 0 && j != i && visit[j]) { int tsum = 0 ; for(int s = 0 ; s < n; s ++) { if(a[i][s] == a[j][s] && a[i][s] == 1) tsum ++; } if(tsum >= k ) { //printf("***%d %d\n",i,j); a[i][j] = 1; a[j][i] = 1; sum++; oktemp = 1; } } } if(oktemp == 0) break; } printf("%d\n",sum); } return 0; }