走出迷宫

applezjm 2014-12-16 11:15:05
题目如下
描述
当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。
假设你已经得到了一个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");
}
...全文
305 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
羽飞 2014-12-17
  • 打赏
  • 举报
回复
楼主百度01剪枝算法
  • 打赏
  • 举报
回复
超时就不止是回溯的问题了,题目应该还有剪枝的要求啦
applezjm 2014-12-17
  • 打赏
  • 举报
回复
不懂 求解释.......

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧