DFS迷宫

DFS(深度优先搜索)可以用来解决迷宫问题。以下是一个使用DFS算法解决迷宫问题的示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php
// 定义迷宫
$maze = array(
array(0, 1, 0, 0, 0),
array(0, 1, 0, 1, 0),
array(0, 0, 0, 0, 0),
array(0, 1, 1, 1, 0),
array(0, 0, 0, 1, 0)
);

// 定义起点和终点
$start = array('x' => 0, 'y' => 0);
$end = array('x' => 4, 'y' => 4);

// 定义搜索函数
function search($maze, $start, $end) {
// 标记已经访问过的位置
$visited = array();
for ($i = 0; $i < count($maze); $i++) {
$visited[$i] = array();
for ($j = 0; $j < count($maze[$i]); $j++) {
$visited[$i][$j] = false;
}
}

// 定义方向数组
$directions = array(
array(0, 1), // 右
array(1, 0), // 下
array(0, -1), // 左
array(-1, 0) // 上
);

// 定义DFS函数
function dfs($maze, $visited, $start, $end, $directions) {
// 判断是否到达终点
if ($start['x'] == $end['x'] && $start['y'] == $end['y']) {
return true;
}

// 标记当前位置已经访问过
$visited[$start['x']][$start['y']] = true;

// 遍历四个方向
foreach ($directions as $d) {
$next = array('x' => $start['x'] + $d[0], 'y' => $start['y'] + $d[1]);
// 判断下一个位置是否可以访问
if ($next['x'] >= 0 && $next['x'] < count($maze) &&
$next['y'] >= 0 && $next['y'] < count($maze[$next['x']]) &&
$maze[$next['x']][$next['y']] == 0 &&
!$visited[$next['x']][$next['y']]) {
// 递归搜索下一个位置
if (dfs($maze, $visited, $next, $end, $directions)) {
return true;
}
}
}

return false;
}

// 调用DFS函数
return dfs($maze, $visited, $start, $end, $directions);
}

// 调用搜索函数
if (search($maze, $start, $end)) {
echo "可以到达终点";
} else {
echo "无法到达终点";
}
?>

以上代码定义了一个迷宫,起点为左上角,终点为右下角。然后使用DFS算法搜索从起点到终点的路径。如果可以找到路径,输出“可以到达终点”,否则输出“无法到达终点”。