Ali and Snoopy(利用广度搜索走迷宫)
Judge Info
- Memory Limit: 32768KB
- Case Time Limit: 1000MS
- Time Limit: 1000MS
- Judger: Number Only Judger
Description
阿狸被困在迷宫,Snoopy要去救他,Snoopy可以向上、下、左、右四个方向行走,每走一步(格)就要喝掉一瓶益力多。
现在给他一个迷宫地图请问:snoopy最少需要多少瓶益力多才能找到阿狸。
Input
先输入一个数t,表示测试的数据个数
下面输入的就是t个迷宫
每个迷宫的输入都应包含以下数据
输入迷宫的大小 n(n<=15),表示迷宫大小为n*n,接下来的n行表示迷宫。用大写字母“S”表示snoopy的位置,用大写字母“E”表示阿狸被困的位置用“.”表示空白,用“*”表示障碍你知道的阿狸和snoopy都只有一个
Output
输出需要的最少的益力多的瓶数m (数据保证一定有最少需要的益利多的瓶数)
Sample Input
1 8 S..*.... .*...**. .**.**.. .*..*..* *..**.** ........ .***..*. ....*..E
Sample Output
16
广度搜索一般需要借助一个队列来存储每次搜索到的内容
#include<iostream>
using namespace std;const int LINELENMAX=225;struct line//
{int coo[LINELENMAX][3];int *p;int *q;line(){p=coo[0];q=coo[0];}void push(int t,int* a){q[0]=t;q[1]=a[0];q[2]=a[1];q+=3;}void pop(){p+=3;}int *ask(){return p;}bool isnull(){if(p==q)return true;elsereturn false;}
};int scoo[2];
char map[15][15];void help(int n)
{int t=0;line s;int flag=0;s.push(0,scoo);map[scoo[0]][scoo[1]]='X';int coo[2];while(!flag){while(s.ask()[0]==t){coo[0]=s.ask()[1]-1;coo[1]=s.ask()[2];s.pop();if(coo[0]>=0&&map[coo[0]][coo[1]]!='*'&&map[coo[0]][coo[1]]!='X'){if(map[coo[0]][coo[1]]=='E'){flag=1;break;}s.push(t+1,coo);map[coo[0]][coo[1]]='X';}coo[0]+=1;coo[1]-=1;if(coo[1]>=0&&map[coo[0]][coo[1]]!='*'&&map[coo[0]][coo[1]]!='X'){if(map[coo[0]][coo[1]]=='E'){flag=1;break;}s.push(t+1,coo);map[coo[0]][coo[1]]='X';}coo[0]+=1;coo[1]+=1;if(coo[0]<n&&map[coo[0]][coo[1]]!='*'&&map[coo[0]][coo[1]]!='X'){if(map[coo[0]][coo[1]]=='E'){flag=1;break;}s.push(t+1,coo);map[coo[0]][coo[1]]='X';}coo[0]-=1;coo[1]+=1;if(coo[1]<n&&map[coo[0]][coo[1]]!='*'&&map[coo[0]][coo[1]]!='X'){if(map[coo[0]][coo[1]]=='E'){flag=1;break;}s.push(t+1,coo);map[coo[0]][coo[1]]='X';}}t++;}cout<<t<<endl;
}int main()
{int t;cin>>t;while(t--){int n;cin>>n;for(int i=0;i<n;i++)for(int j=0;j<n;j++){cin>>map[i][j];if(map[i][j]=='S'){scoo[0]=i;scoo[1]=j;}}help(n);}return 0;
}
Ali and Snoopy(利用广度搜索走迷宫)相关推荐
- Qt利用深度优先搜索实现迷宫寻宝
先看效果: 利用QT搭建迷宫界面 利用单选框来构造迷宫,设置障碍物和宝藏的位置 利用深度优先搜索实现迷宫寻宝,并且在寻找的过程中避开障碍物. 搜索算法在线程中进行 定义方格的属性 enum Signa ...
- 深度优先搜索——走迷宫问题
题目大意: 用二维数组存储一个n * m的迷宫,0表示路,1表示墙.一个人位于左上角 (1,1)(1,1) 处,已知该人每次可以向上.下.左.右任意一个方向移动一个位置,求从左上角移动到右下角的最少次 ...
- 深度优先搜索—走迷宫
例题:走迷宫 1.需要一个终止条件, 2.需要四个搜索方向:上下左右: 3.并且需要使用bool进行标记一个方向是否访问过: 4.如果需要找到多个可行解,那么如果该方向可行,需要取消标记.如果只需要也 ...
- Pygame 使用Djkstra广度搜索寻找迷宫(相对)最短路径
基于之前写的迷宫生成器实现了Djkstra算法搜索路径. https://blog.csdn.net/ChillingKangaroo/article/details/122800431 Djkstr ...
- 广度搜索解决迷宫问题
一 问题描述 用一个二维数组表示一个迷宫,其中 1 表示墙壁,0 表示可以走的路,只能横着走或竖着走,不能斜着走,编写程序,找出从左上角到右下角的最短路径. int maze[5][5] = { 0, ...
- 利用广度策略解决迷宫问题
基本思路 1.创建两个空队列LinkQueueX和LinkQueueX 2.将入口entreX和entryY分别压入队列LinkQueueX和LinkQueueX. 3.当队列不空 ①取队头元素,出队 ...
- 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径)
// algo3-11.cpp 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径) #include"c1.h" #include"func3-1.cpp" ...
- 广度优先算法_算法浅谈——走迷宫问题与广度优先搜索
本文始发于个人公众号:TechFlow,原创不易,求个关注 在之前周末LeetCode专栏当中,我们详细描述了深度优先搜索和回溯法,所以今天我们继续这个话题,来和大家聊聊搜索算法的另一个分支,广度优先 ...
- 深度优先搜索和广度优先搜索及典例分析(走迷宫问题(BFS)和棋盘问题(DFS))
搜索算法在实际编程应用中起着举足轻重的作用,学会掌握搜索算法并熟练应用搜索算法来解决实际问题不得不说是一件相当COOL的事,所以我将深度搜索和广度搜索认真地做了详细的总结,与诸君共勉,也方便以后查阅复 ...
最新文章
- 考csp所需算法_CSP vs RxJS:您所不知道的。
- php如何定时执行任务
- 百度地图应用开发(一)
- 小学生python入门-小学生Python入门基础知识有哪些
- markdown流程图多分支_提高生产力的好工具MarkDown语法学习
- C++ floor、ceil、round函数的区别
- 第1章 ssh命令和SSH服务详解
- 详析 Kubernetes 在边缘计算领域的发展
- Kali Linux 秘籍 翻译完成!
- java建立检索项语料库_sentilib_语料库项目_search模块的实现
- 双向循环链表涉及双向指针的基本操作(C语言)
- jmeter中控制器其中一个访问不到_Jmeter你所不知道的知识点!
- 优先队列/oriority queue 之最大优先队列的实现
- 进阶:案例三: Upload File using WebDynpro
- hbase权威指南-客户端API高级特性
- Arduino Uno 学习第零课,Arduino认识
- 在SCI-Hub上下载国外论文
- 云硬盘备份 | 概览
- kvm切换显示不同服务器界面,让复杂变简单 体验KVM多电脑切换器
- [从头读历史] 第261节 左传 [BC657至BC598]