题目链接:
传送门
题目描述:
PIPI定义了一个二维数组:
int maze[5][5] = {
0, 1, 0, 0, 0,
0, 1, 0, 1, 0,
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,请找出从左上角到右下角的最短路线。
输入:
仅一组测试用例。
一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。
输出:
左上角到右下角的最短路径,格式如样例所示。
样例输入:
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
样例输出:
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)
题目思路:
从左上角(0, 0)位置开始,上下左右进行搜索,可以定义一个方向数组,代表上下左右四个方向,使用方向数组,可以使一个点上下左右移动。对于数组中的每个元素用结构体来存储,除了有x,y成员外,还要定义pre成员,用来表示从左上角到右下角的最短路径中每个元素的前一个元素的下标,即保存路径,方便后面的输出。
广度优先搜索借助队列进行操作,其中要注意
(1)搜索的元素是否在迷宫内。
(2)是否可行(其中1是墙壁不能走,0可以走)。
c语言参考代码:
#include <stdio.h>
#include <string.h>//memset()函数头文件。
int maze[5][5];
int visited[5][5];//记录是否访问过的数组。
int dir[4][2]={
{
-1,0},{
1,0},{
0,