SDJZUOJ迷宫问题(BFS)
来源:互联网 发布:数据共享方式 编辑:程序博客网 时间:2024/06/05 15:58
题目描述
小明置身于一个迷宫,请你帮小明找出从起点到终点的最短路程。
小明只能向上下左右四个方向移动。
输入格式
输入包含多组测试数据。输入的第一行是一个整数T,表示有T组测试数据。
每组输入的第一行是两个整数N和M(1<=N,M<=100)。
接下来N行,每行输入M个字符,每个字符表示迷宫中的一个小方格。
字符的含义如下:
‘S’:起点
‘E’:终点
‘-’:空地,可以通过
‘#’:障碍,无法通过
输入数据保证有且仅有一个起点和终点。
输出
对于每组输入,输出从起点到终点的最短路程,如果不存在从起点到终点的路,则输出-1。
样例输入
1
5 5
S-###
-----
##---
E#---
---##
样例输出
9
</pre><pre name="code" class="cpp">/*15 5S-###-----##---E#------##*/#include<stdio.h>#include<iostream>using namespace std;struct note{ int x;//横坐标 int y;//纵坐标 int s;//走的步数};struct note que[2051];char a[51][51];int i,j,k,n,m,startx,starty,p,q,ty,tx,flag;int book[51][51];int next[4][2]={{0,1}, {1,0}, {0,-1}, {-1,0}};void bfs(){ //队列初始化 int head=1; int tail=1; //往队列插入迷宫的入口坐标 que[tail].x=startx; que[tail].y=starty; que[tail].s=0; tail++; book[startx][starty]=1; flag=0;//用来标记是否到达目的地,0表示没有 while(head<tail)//当队列不为空时候 { //枚举四个方向(注意方向数组的设置和for循环的遍历,通用模板) for(k=0;k<=3;k++) { //计算下一个点坐标 tx=que[head].x+next[k][0]; ty=que[head].y+next[k][1]; //判断是否越界 if(tx<1||tx>n||ty<1||ty>n) continue; //判断是否是障碍物或者已经在路径中 if(a[tx][ty]!='#'&&book[tx][ty]==0)//此处不能写 a[tx][ty]=='-',因为这样起点就进不了队列中 { //把这个点标记为已经走过 //注意宽带搜索每个点只能入队列一次 ,和dfs不同,所以book的值不需要恢复为0; book[tx][ty]=1; //插入新的点到队列中 que[tail].x =tx; que[tail].y=ty; que[tail].s=que[head].s+1; tail++; } //如果到了目的地,停止扩展,任务结束,退出循环 if(tx==p&&ty==q) { //注意这两句话千万位置不能颠倒 flag=1; break; } } if(flag==1) break; head++;//这个地方千万不能忘记,当一个点扩展结束后,head++才能使得后面的点再进行扩展 } //打印队列中末尾最后一个点的步数 //注意tail是指向队尾的下一个位置,所以需要-1 cout<<que[tail-1].s; }int main(){ cin>>n>>m; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { cin>>a[i][j]; if(a[i][j]=='S') { startx=i; starty=j; } if(a[i][j]=='E') { p=i; q=j; } } } bfs(); return 0; }
0 0
- SDJZUOJ迷宫问题(BFS)
- SDJZUOJ迷宫问题(BFS)
- 迷宫问题(BFS)
- 迷宫问题(bfs)
- 迷宫问题(BFS)
- sdjzu1102 迷宫问题(BFS)
- poj3984 迷宫问题(BFS)
- POJ3984 迷宫问题(BFS)
- poj3984-迷宫问题(BFS)
- C++迷宫问题(BFS)
- POJ3984 迷宫问题(BFS)
- poj3984(bfs迷宫问题)
- 7084:迷宫问题(bfs)
- poj3984 迷宫问题(图-BFS)
- POJ 3984 迷宫问题 (BFS,水题)
- poj 3984 -- 迷宫问题 (bfs)
- 模拟求解迷宫问题(DFS+BFS)
- poj3984迷宫问题(bfs带路径)
- 【bzoj2258】【文本校对】【splay+hash】
- 实战做项目如何选择开源许可协议(一)-了解协议
- 获得时间戳
- Cookie/Session机制详解
- Java NIO
- SDJZUOJ迷宫问题(BFS)
- 树莓派2代B+通过ssh+vnc共享连接ubuntu16.04
- Android style属性
- 登录界面的密码设置
- JQuery设置和去除disabled属性
- SlidingMenu、xUtils、ViewPagerindicator源码解析
- 架构之分布式消息队列
- MySQL 操作(一)
- Eclipse工作空间的删除方法