Solution1
本题数据范围较小, n n n 最多只有 50 50 50,所以可以直接暴力枚举,简单省事。
可以使用同一个数组,因为红绿灯是双向的,所以无需考虑过去和回来直接枚举,然后把最快的两条路径求和即可。
可以建立一个数组 a a a 用来保存各个路径所耗费的时间,数组中应有 n n n 个元素。
首先,给每条路径都加上中间路耗费的时间。
然后枚举路径,因为不能往回走,所以,如果你上面走到了 i i i 那么你下面就需要从 i i i 开始枚举。
枚举好之后,只需要找到耗费时间最少的两条路径,然后把他们的耗费时间加起来即可。
核心代码:
for(int i=1;i<=n;i++)
{
k[i]=b[i];//b是中间的路
for(int j=1;j<=i-1;j++)
k[i]+=a[1][j];//上面的路
for(int j=i;j<=n-1;j++)//别从1开始啦!
k[i]+=a[2][j];//下面的路
}
Solution2
第二种思路是最短路!
我这边给大家提供一种存路线的方案。
for(int i=0;i<=1;i++)
for(int j=2;j<=n;j++)
cin>>a[i*n+j-1][i*n+j];
for(int i=1;i<=n;i++)
cin>>a[i][i+n]
存好图后,其实就是普通的最短路,但是这道题目因为有的地方走过后就不能再走了,所以需要记录最短路线,并删去,十分麻烦,所以还是推荐上述方法。