SWUST OJ4:迷宫问题
题目描述
给定一个迷宫,找到从开始到目标的最短路径。
输入
Input consists serveral test cases.
First line of the input contains number of test case T.
For each test case the first line contains two integers N , M ( 1 <= N, M <= 100 ).
Each of the following N lines contain M characters. Each character means a cell of the map.
Here is the definition for chracter.
Constraint:
- For a character in the map:
- 'S' : start cell
- 'E' : goal cell
- '-' : empty cell
- '#' : obstacle cell
- no two start cell exists.
- no two goal cell exists.
输出
For each test case print one line containing shortest path. If there exists no path from start to goal, print -1.
样例输入
1 5 5 S-### ----- ##--- E#--- ---##样例输出
9
#include<stdio.h> #include<string.h> #include<math.h> #include<malloc.h> #define INF 0x3f3f3f3f #define MAX(x,y) (x>y?x:y) #define MIN(x,y) (x>y?y:x) #define M 100 int dir[][2] = { {1,0},{0,-1},{0,1},{-1,0} }; char a[M][M]; int vis[M][M]; int xa, ya,xb,yb; int m, k; int flag = 1; struct node {int x;int y;int step; }q[M*M]; void bfs(int xb, int yb,int xa,int ya) {int head = 1, tail = 1;q[tail].x = xb;q[tail].y = yb;q[tail].step = 0;vis[xb][yb] = 1;tail++;while (head < tail){int x = q[head].x;int y = q[head].y;int step = q[head].step;if (x == xa && y == ya){flag = 0;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 < k && a[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++;}if (flag == 1){printf("-1\n");} } int main() {int n;scanf("%d", &n);while (n--){flag = 1;memset(vis, 0, sizeof(vis));scanf("%d%d", &m, &k);for (int i = 0; i < m; i++){scanf("%s", a[i]);}for (int i = 0; i < m; i++){for (int j = 0; j < k; j++){if (a[i][j] == 'S'){xb = i;yb = j;}if (a[i][j] == 'E'){xa = i;ya = j;a[i][j] = '-';}}}bfs(xb, yb, xa, ya);}return 0; }
SWUST OJ4:迷宫问题相关推荐
- swust 1646 迷宫与宝藏
机器人要在一个矩形迷宫里行动(不能原地停留,只能走向上/下/左/右),每移动一格花费1个单位时间. 迷宫有以下几种元素: [*] 机器人的起点 [#] 墙.机器人不能走过这些格子 [.] 平地.机器人 ...
- [JS][dfs]题解 | #迷宫问题#
题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...
- hdu 1272 小希的迷宫
Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该 ...
- C语言通路寻找,用C语言解决迷宫问题设计与寻找通路问题.pdf
用c语言解决迷宫设计与寻找通路问题 摘 要:本课程设计主要解决设计一个迷宫以及在给出一组入口和出口的情况下,求出一条通路的问题.在课程 设计中,程序设计语言采用VisualC++6.0,数据结构采用顺 ...
- java栈 迷宫_利用栈实现迷宫的求解
问题描述:这时实验心理学中的一个典型的问题,心理学家吧一只老鼠从一个无顶的大盒子的入口处赶进迷宫.迷宫设置很多隔壁,对前进方向形成了许多障碍,心理学家在迷宫的唯一出口处放置了一块奶酪,吸引老鼠仔迷宫中 ...
- python迷宫问题求最短路径_用栈求解迷宫问题的所有路径及最短路径程序
目的:能将栈运用的更为熟练 实验内容:求解迷宫问题程序,要求输出如图所示的迷宫的路径,并求出第一条最短路径的长度以及最短路径. 设计的算法功能: mgpath(int xi,int yi,int xe ...
- 用栈、回溯算法设计迷宫程序
目录 1.走迷宫与回溯算法 2.迷宫设计栈扮演的角色 3.Python实现走迷宫 栈的应用有许多,本篇博文着重将栈与回溯(Backtracking)算法结合,设计走迷宫程序.其实回溯算法也是人工智能的 ...
- 不相交集类以及应用迷宫生成
简单介绍: 考虑一个迷宫的生成,一个简单算法就是从各处的墙壁开始(除入口和出口之外).此时,不断地随机选择一面墙,如果被该墙分割的单元彼此不联通,那么就把这面墙拆掉.重复这个过程直到开始单元和终止单元 ...
- 深度优先搜索算法在RPG游戏迷宫中的应用
在RPG游戏中我们经常会看到一些迷宫,我之前玩仙剑一的时候就经常在几个迷宫里绕来绕去也绕不出来,玩仙三由于游戏视角可以转,更是费劲.这里我们使用深度优先算法达到遍历一个迷宫的目的. 首先定义一个有序元 ...
最新文章
- php分页显示页数代码,php-Codeigniter分页显示结果数和页数
- c语言的256个字符,C语言版 256点FFT算法
- 14.6 设置后台线程
- 1133:输出亲朋字符串
- 初学者宝典:C语言入门基础知识大全(下)
- html实体转化字符串 php_php将字符串转为HTML的实体引用的一个类
- 命名规范、MVC 开发模式
- css三种引入方式以及其优先级的说法
- html5+css3动画学习总结
- PowerCMD——cmd的命令行工具
- spring源码之bean加载(bean解析下篇)
- [Swift]LeetCode664. 奇怪的打印机 | Strange Printer
- 北京理工大学—计算机专业课程资源
- 计算机名称位数怎么改,请问下怎样更改电脑位数
- linux没法上网,LINUX没法上网?
- Chapter2 Creating and Destroying Objects
- ThreadPoolExecutor(二)——execute
- vue封装图片滑块验证+读秒组件
- Linux就该这么学--第五期 学习笔记
- Thinkphp内核虚拟资源素材源码交易下载平台网站源码
热门文章
- TCL脚本学习(过程与文件读写)
- 一种将 Tree-LSTM 的强化学习用于连接顺序选择的方法
- 关于IT信息化的一些感想
- 微型计算机用什么显卡,流言终结者 侧板风扇真能给显卡降温吗
- 现金贷风控生命周期——贷中和贷后
- datagridvie设置行高列宽_DataGridView 列宽和行高自动调整的设定
- 计算机毕业设计Java中医药院校科研会议系统(源码+系统+mysql数据库+Lw文档)
- aix系统中514端口占用取消
- 操作系统原理模拟实验(基于C/C++模拟处理机调度、存储管理和文件系统)
- linux0.11-文件系统