标签:int 路径 迷宫 mark 110 && include
迷宫的最短路径
给定一个大小为 NxM的迷宫。迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格
的通道移动。请求出从起点到终点所需的最小步数。请注意,本题假定从起点一定可以移动
到终点。
是道BFS的题目。
输入:
10 10
#S######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#...G#
输出:
22
#include <iostream>
#include<cstdlib>
#include<cstdio>
#include<stack>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cmath>
#include<vector>
#include<map>
#include<set>
using namespace std;
char w[110][110];
int N=0;
int M=0;
int ans=0;
int s_x,s_y;
int d_x,d_y;
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
int mark[110][110];
typedef pair<int,int> PA;
void bfs(){
queue<PA> q;
q.push(PA(s_x,s_y));
memset(mark, -1, sizeof(mark));
mark[s_x][s_y]=0;
while(q.size()){
PA p=q.front();
q.pop();
if(p.first==d_x&&p.second==d_y){
return;
}
for(int i=0;i<4;i++){
int x_n=p.first+dx[i];
int y_n=p.second+dy[i];
if(w[x_n][y_n]!='#'&&x_n>=0&&x_n<N&&y_n>=0&&y_n<M&&mark[x_n][y_n]==-1){
q.push(PA(x_n,y_n));
mark[x_n][y_n]=mark[p.first][p.second]+1;
}
}
}
}
int main()
{
scanf("%d %d",&N,&M);
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
cin>>w[i][j];
if(w[i][j]=='S'){
s_x=i;
s_y=j;
}
if(w[i][j]=='G'){
d_x=i;
d_y=j;
}
}
}
bfs();
printf("%d\n",mark[d_x][d_y]);
return 0;
}
标签:int,路径,迷宫,mark,110,&&,include 来源: https://www.cnblogs.com/A1han/p/15858667.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。