[C++] DFS-迷宫问题全部路径

这篇博客详细介绍了如何使用深度优先搜索(DFS)解决迷宫问题,从存储迷宫、读取模块到输出模块的实现过程,并给出了核心的DFS代码逻辑。文章通过实例解释了如何判断路径合法性,以及在找到终点后的处理方式。
摘要由CSDN通过智能技术生成

1.题目

描述:
给定一个 m ∗ n m*n mn的迷宫,从 S S S出发,到 T T T,找出它的所有答案
样例输入:

5 6
....S#
.##...
.#..#.
#..##.
.T....

样例输出:

The best answer is:
...++#
.##+..
.#++#.
#.+##.
.++...
step = 7

The other answers are:
...++#
.##+..
.#++#.
#.+##.
.++...
step = 7

....+#
.##++.
.#++#.
#++##.
.+....
step = 7

....+#
.##++.
.#++#.
#.+##.
.++...
step = 7

....+#
.##.++
.#..#+
#..##+
.+++++
step = 9

...++#
.##+++
.#..#+
#..##+
.+++++
step = 11

....+#
.##.++
.#..#+
#++##+
.+++++
step = 11

...++#
.##+++
.#..#+
#++##+
.+++++
step = 13

sum = 8

2.

2.1. 存储

bool型存就可以了:

bool map[SIZE][SIZE];

( 1 , 1 ) (1, 1) (1,1) ( m , n ) (m, n) (m,n) ,用false做墙,true做空地。
这样,由于全局变量默认为false,自然地图边缘就有了一圈墙

              ########
....S#        #....S##
.##...        #.##...#
.#..#.  --->  #.#..#.#
#..##.        ##..##.#
.T....        #.T....#
              ########

考虑到要图形化输出,先存一份原图:

char pic[SIZE][SIZE];

路径用vector存一下:

struct Move {
   
	int x, y;
	Move(int a, int b) {
   
		x = a;y = b;
	}
};

vector<Move> path;
vector<vector<Move> > allpath;

2.2.读取模块:

scanf("%d %d", &m, &n);
sx = 1; sy = 1; tx = m; ty = n;
	
for (int i = 0; i < m; ++i) {
   
	char s[SIZE];
	scanf("%s", pic[i]);
	strcpy(s, pic[i]);
	for (int j = 0; j < n; ++j) {
   
		char c = s[j];
		if (c == 'S') sx = i+1, sy = j+1, map[i+1][j+1] = 1;
		else if (c == 'T') tx = i+1, ty = j+1, map
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值