广搜是c++中的一种常见算法,如果你有一些c++的基本知识,那你可以看一下这个代码。
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct node{
int x,y;
int step;
}q[250100];
char mp[505][505];
int vis[505][505];
int dis[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int bfs(int sx,int sy,int tx,int ty){
int head=0,tail=0;
node tmp;
tmp.x=sx;tmp.y=sy;tmp.step=0;
vis[sx][sy]=1;
q[tail++]=tmp;
while(head<tail){
node f=q[head];head++;
for(int i=0;i<4;i++){
int xx=f.x+dis[i][0];
int yy=f.y+dis[i][1];
if(xx<0||xx>=n||yy<0||yy>=m||mp[xx][yy]=='#'||vis[xx][yy]==1){
continue;
}
node g;
g.x=xx;g.y=yy;g.step=f.step+1;
vis[xx][yy]=1;
q[tail++]=g;
if(xx==tx&&yy==ty){
return g.step;
}
}
}
return -1;
}
int main(){
scanf("%d%d",&n,&m);
int sx,sy,tx,ty;
for(int i=0;i<n;i++){
scanf("%s",mp[i]);
for(int j=0;j<m;j++){
if(mp[i][j]=='S'){
sx=i;
sy=j;
}
if(mp[i][j]=='T'){
tx=i;
ty=j;
}
}
}
printf("%d\n",bfs(sx,sy,tx,ty));
return 0;
}
主要因为作者比较菜,所以用的是一个数组,一般使用队列。
给大家看一下题目。
**最近在研究机器人,**想看看自己的somebody够不够智能,于是**将somebody放在一个n*m的迷宫中,看看机器人能不能在最短的时间内到达目的地,可是**不知道最短的时间是多少,现在请你帮**算算somebody到达目的地的最短时间是多少?
然后是样例。
3 3
S..
##.
.T.
作者相信读者一定非常智慧,所以样例是什么意思,肯定看得出来。如若没看出来,智慧的作者也是可以写的。
S:起点,#:障碍(反正**过不去),T:终点,。:(不要看漏啦)可以通行。