//大概意思就是:构成一个较大的二位数组(!!!!这个好像不可以直接定义,需要其他办法),然后行和列就是表示两岸,数值表示之前的桥的耐久度,
//先遍历行,如果一整行的值都是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.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

东星耀阳 2年前 回复TA
真羡慕这些脑子好用的人啊