走出迷宫
题目如下
描述
当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。
假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。
关于输入
第一行是两个整数n和m(1<=n,m<=100),表示迷宫的行数和列数。
接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点,'T'表示出口。
关于输出
输出从起点到出口最少需要走的步数。(你不能起出迷宫外)
例子输入
3 3
S#T
.#.
...
例子输出
6
问题是这样的....我在运行程序时m,n较小时可以运行,而当较大时会超时,求教怎么办
#include<iostream>
#include<string.h>
using namespace std;
int m,n;
char a[110][110]={0};
int b[110][110]={0};
int num,p=0;
void map(int i,int j)
{
if(j>0&&a[i][j-1]!='#'&&b[i][j-1]>b[i][j])
{b[i][j-1]=b[i][j]+1;map(i,j-1);}
if(j<n-1&&a[i][j+1]!='#'&&b[i][j+1]>b[i][j])
{b[i][j+1]=b[i][j]+1;map(i,j+1);}
if(i>0&&a[i-1][j]!='#'&&b[i-1][j]>b[i][j])
{b[i-1][j]=b[i][j]+1;map(i-1,j);}
if(i<m-1&&a[i+1][j]!='#'&&b[i+1][j]>b[i][j])
{b[i+1][j]=b[i][j]+1;map(i+1,j);}
}
int main(){
int sa,sb,ta,tb;
cin>>m>>n;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
b[i][j]=1000000;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
cin>>a[i][j];
if(a[i][j]=='S')
{sa=i;sb=j;}
if(a[i][j]=='T')
{ta=i;tb=j;b[i][j]=0;}
}
map(ta,tb);
cout<<b[sa][sb]<<endl;
system("pause");
}