穿越通道
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了穿越通道相关的知识,希望对你有一定的参考价值。
描述
有个helihui建造的通道,这个通道比较奇怪,我们把通道看成平面的,里面全是数字,看例子:
走的时候只能一格一格的走,走的方向只能往下或往右,并且不能走出边界。从入口进来,每个格子代表通过这个格子的时间。Helihui规定最左上角是通道入口, 最右下角是通道出口,现在要求你判断从入口到出口的所有路径中总时间最小的那条路径。并输出通过该条路径的总时间,上面的红色箭头是表示这样走可以得到最小的总时间。
输入
输入数据有多组。
每组输入n,m整数,n表示通道格子的行数,m表示通道格子的列数,0<n,m<100,接下来输入n行m列的矩阵,矩阵的数据的范围0到32765。
走的时候从通道入口进入从出口出去,并且通道入口一直在最左上角,通道出口一直在最右下角。
输出
输出从入口到出口所有路径中最短时间。
样例输入
4 6
3 4 3 2 5 2
1 6 7 5 3 1
2 1 8 6 9 1
7 10 4 6 7 8
样例输出
29
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
#include <limits.h>
using namespace std;
int s[110][110],f[110][110];
int t[2][2]=1,0,0,1;
int n,m,mi;
int dfs(int x,int y,int temp)
if(x==n&&m==y)
if(mi>temp)mi=temp;
return 0;
for(int i=0;i<2;i++)
int anx=x+t[i][0];
int any=y+t[i][1];
if(anx>=1&&anx<=n&&any>=1&&any<=m&&f[anx][any])
temp+=s[anx][any];
f[anx][any]=false;
dfs(anx,any,temp);
f[anx][any]=true;
temp-=s[anx][any];
return 0;
int main()
while(~scanf("%d %d",&n,&m))
mi=0xfffffff;
memset(f,true,sizeof(f));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&s[i][j]);
dfs(1,1,s[1][1]);
printf("%d\\n",mi);
return 0;
以上是关于穿越通道的主要内容,如果未能解决你的问题,请参考以下文章