深搜和广搜 迷宫最短路径

一、概述

初次接触迷宫广搜问题,整了几天才渐渐明白其中原理;附上自己的学习经验(适合初学者);

二、问题

输入:第一行输入一个整数,表示有几组数据; 第二行输入两个整数 行和列 (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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值