标题: | 解救小哈 | ||||
标签: | 搜索 广度优先搜索 | ||||
详情: | 有一天,小哈一个去玩迷宫。但是方向感很不好的小哈很快就迷路了。小哼得知后便立即去解救无助的小哈。小哼当然是有备而来,已经弄清楚了迷宫地图,现在小哼要以最快速度去解救小哈。问题就此开始了…… 迷宫由n行m列的单元格组成,每个单元格要么是空地,要么是障碍物。你的任务是帮助小哼找到一条从迷宫的起点到小哈所在位置的最短路径,注意障碍物是不能走的,当然也不能走到迷宫之外。n和m都小于等于100。 ![]() | ||||
输入格式: | | ||||
输出格式: | | ||||
提示: | RQNOJ 34紧急援救 195校园迷宫 | ||||
样例: |
|
#include <iostream>
#include <queue>
using namespace std;
typedef struct Node{
int x,y,s;
}N;
queue<N> que;
int a[101][101];
int b[101][101];
int main(int argc, char** argv) {
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
int x,y,p,q;
cin>>x>>y>>p>>q;
N node;
node.x=x;node.y=y;node.s=0;
que.push(node);
b[x][y]=1;
int next[4][2]={{1,0},{0,-1},{-1,0},{0,1}};
int flag=0;
while(!que.empty()){
for(int k=0;k<4;k++){
x=que.front().x+next[k][0];
y=que.front().y+next[k][1];
if(x<1 || x>n || y<1 || y>m)
continue;
if(!a[x][y] &&!b[x][y] ){
b[x][y]=1;
node.x=x;
node.y=y;
node.s=que.front().s+1;
que.push(node);
}
if(x==p && y==q){
flag=1;
break;
}
}
if(flag)
break;
//一个点四个方向遍历完之后移除;
que.pop();
}
if(que.empty())
cout<<"No Way!";
else
cout<<que.back().s;
return 0;
}