一、概述
初次接触迷宫广搜问题,整了几天才渐渐明白其中原理;附上自己的学习经验(适合初学者);
二、问题
输入:第一行输入一个整数,表示有几组数据; 第二行输入两个整数 行和列 (r ,c);接下来输入r行c列的矩阵(S是入口,E是出口,#代表墙,. 是可行区域)
输出:从入口S到E的最短路径 (假设输入数据必定有一条可行路径)
例如:输入:
2
8 8
########
#......#
#.####.#
#.####.#
#.####.#
#.####.#
#...#..#
#S#E####
5 9
#########
#.#.#.#.#
S.......E
#.#.#.#.#
#########
输出:
5
9
三、深搜
1、基本思想:运用递归回溯遍历整个迷宫,计算出所有可行路径,再比较出最短的;
2、代码:
#include<stdio.h>
#include<string.h>
char a[100][100];
int dx[]={-1,0,1,0},dy[]={0,-1,0,1}; //定义出在当前位置走下一步的四种情况
int r,c,s1,s2,minn,n;
void dfs(int x,int y,int count)
{
for(int i=0;i<4;i++) //每次位置的四种可能走的四周 都遍历一遍
{
int tx=x+dx[i]; //尽量在函数内定义tx,ty 避免全局变量在递归时的影响
int ty=y+dy[i];
if(tx>=0&&ty>=0&&tx<r&&ty<c&&(a