标签:tail int 迷宫 1254 一本 nx ny step ya
【题目描述】
当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。
假设你已经得到了一个n×mn×m的迷宫的图纸,请你找出从起点到出口的最短路。
【输入】
第一行是两个整数nn和mm(1≤n,m≤1001≤n,m≤100),表示迷宫的行数和列数。
接下来nn行,每行一个长为mm的字符串,表示整个迷宫的布局。字符‘
.
’表示空地,‘#
’表示墙,‘S
’表示起点,‘T
’表示出口。【输出】
输出从起点到出口最少需要走的步数。
【输入样例】
3 3 S#T .#. ...【输出样例】
6#include<stdio.h> #include<queue> #include<string.h> int m, n; char c[100][100]; int xa, ya, xb, yb; bool vis[200][200]; int dir[][2] = { {1,0},{-1,0},{0,1},{0,-1} }; struct node { int x; int y; int step; }q[40000]; void bfs(int xa, int ya,int xb,int yb) { int head = 1, tail = 1; memset(vis, 0, sizeof(vis)); vis[xa][ya] = 1; q[tail].x = xa; q[tail].y = ya; q[tail].step = 0; tail++; while (head < tail) { int x = q[head].x; int y = q[head].y; int step = q[head].step; if (x == xb && y == yb) { printf("%d\n", step); break; } for (int i = 0; i < 4; i++) { int nx = x + dir[i][0]; int ny = y + dir[i][1]; if (nx >= 0 && nx < m && ny >= 0 && ny < n && c[nx][ny] == '.' && vis[nx][ny] == 0) { vis[nx][ny] = 1; q[tail].x = nx; q[tail].y = ny; q[tail].step = step + 1; tail++; } } head++; } } int main() { scanf("%d%d", &m, &n); for (int i = 0; i < m; i++) { getchar(); for (int j = 0; j < n; j++) { scanf("%c", &c[i][j]); if (c[i][j] == 'S') { xa = i; ya = j; } if (c[i][j] == 'T') { xb = i; yb = j; c[i][j] = '.'; } } } bfs(xa, ya, xb, yb); return 0; }
标签:tail,int,迷宫,1254,一本,nx,ny,step,ya 来源: https://blog.csdn.net/weixin_63587703/article/details/122776670
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。