这个题意思是,最后形成的图中每一个点,要么为0条隧道经过,要么联通两个隧道。所以可以用下面的代码实现
#include <stdio.h>
#include <stdlib.h>int main()
{
int n,m,i,j,k=0,t[2],max[2];
scanf("%d%d",&n,&m);
struct node{
int st;
int en;
int day;
}node[m],node2[2][m];//node2用来存储从两个方向出发的路径节点
for(i=0;i<m;i++)
{
scanf("%d",&node[i].st);
scanf("%d",&node[i].en);
scanf("%d",&node[i].day);
}
for(i=0;i<2;i++)
for(j=0;j<m;j++)
{
node2[i][j].day=0;
}//初始化存储路径节点
for(i=0;i<m;i++)
{
if(node[i].st==1)
{
t[k]=i;//有两个节点开始站点是1,节点下标分别存储在t[0],t[1];
node2[k][0]=node[i];//分别把两个节点存储在node2[0][0],node2[1][0]中
k++;
}
}
for(i=0;i<2;i++)//分别从两个方向出发开始找下一个路径节点
{
k=1;
while(node[t[i]].en!=n)
{
for(j=0;j<m;j++)
{
if(node[t[i]].en==node[j].st)
{
node2[i][k]=node[j];//将找到的路径节点存储在node2[i]中,i可以等于1或2.分别表示两条路径
t[i]=j;
k++;
}
}
}
}
for(i=0;i<2;i++)
{
max[i]=node2[i][0].day;
for(j=0;j<m;j++)
{
if(max[i]<node2[i][j].day)
max[i]=node2[i][j].day;
}
}//分别找出两条路径的最大天数
if(max[0]<max[1])
printf("%d",max[0]);
else
printf("%d",max[1]);
return 0;
}