//大概意思就是:构成一个较大的二位数组(!!!!这个好像不可以直接定义,需要其他办法),然后行和列就是表示两岸,数值表示之前的桥的耐久度, //先遍历行,如果一整行的值都是0,说明这一个岸被孤立了,所以就满足题意。跳出循环,输出day。 #include<stdio.h> #include<malloc.h> int shuzu[10001][10001] = { 0 };//这里有点问题,数组定义过大。应该是唯一不对的点,但是在我的编译器VS2019可以用 //数组用来存相连的情况,数组中的值存天数。 int main() { int n = 0, m = 0, a = 0, b = 0, t = 0; int count = 0, day = 0; if (scanf("%d %d", &n, &m))//输入岸和桥的值 { } for (int i = 1; i <= m; i++) { if (scanf("%d %d %d", &a, &b, &t))//输入连接情况 { } shuzu[a][b]= t;//把使用天数写到数组中 shuzu[b][a] = t; } int flag = 0;//定义一个标志,用于结束循环 while (flag==0) { for (int j = 1;j <= m;j++)//先循环行 { flag = 0;//先让标志归零 for (int k = 1; k <= m; k++)//循环列 { if (shuzu[j][k]== 0)//意思就是两岸不相连 { count++; } } if (count == m)//说明改行所有数均为0,即这个岸不和其他岸相连,符合题意,跳出两层循环,输出day就可以了。 { flag = 1; break; } else { count = 0;//继续循环下一行,先把count清零。 } } if (count==m)//这里防止day++多执行; { break;//跳出大循环 } else { day++;//如果不满足上述条件,就说明没有岸被孤立,day++ } for (int s = 1; s <= m; s++)//判断数组中的数值,如果有大于0的,就说明还没有坏掉,让他-1,就是耐久度-1; { for (int t = 1;t <= m;t++) { if (shuzu[s][t] > 0) { shuzu[s][t]--; } } } } printf("%d", day);//输出day!就是结果了。 return 0; }
0.0分
2 人评分
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1092 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:702 |
大神老白 (C语言代码)浏览:690 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:633 |
printf基础练习2 (C语言代码)浏览:826 |
简单的a+b (C语言代码)浏览:661 |
【计算球体积】 (C语言代码)浏览:1158 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:490 |
演讲大赛评分 (C语言代码)浏览:1697 |
C二级辅导-阶乘数列 (C语言代码)浏览:583 |