📅  最后修改于: 2023-12-03 14:58:08.905000             🧑  作者: Mango
在许多计算机科学应用中,需要遍历地图或网络。遍历问题可以用很多方法解决,例如BFS(宽度优先搜索)或DFS(深度优先搜索)算法。本文将介绍如何使用C++编写遍历地图的程序。
以下是使用DFS算法遍历地图的C++代码:
#include <iostream>
#include <vector>
using namespace std;
#define MAXN 100 // 地图大小
char map[MAXN][MAXN];
bool visited[MAXN][MAXN]; // 记录是否被访问
void dfs(int x, int y)
{
visited[x][y] = true;
cout << map[x][y] << " ";
// 向上
if (x - 1 >= 0 && !visited[x - 1][y] && map[x - 1][y] != '#')
dfs(x - 1, y);
// 向下
if (x + 1 < MAXN && !visited[x + 1][y] && map[x + 1][y] != '#')
dfs(x + 1, y);
// 向左
if (y - 1 >= 0 && !visited[x][y - 1] && map[x][y - 1] != '#')
dfs(x, y - 1);
// 向右
if (y + 1 < MAXN && !visited[x][y + 1] && map[x][y + 1] != '#')
dfs(x, y + 1);
}
int main()
{
// 假设有一个地图,'#'表示障碍物,'.'表示通路
char input[] = "##########"
"#......###"
"#..####.##"
"#..#.....#"
"#####.#..#"
"#....#.#.#"
"##.#.#.#.#"
"###......#"
"##########";
int k = 0;
for (int i = 0; i < MAXN; i++)
for (int j = 0; j < MAXN; j++)
map[i][j] = input[k++];
// 从(1,1)出发遍历地图
dfs(1, 1);
cout << endl;
return 0;
}
以上代码展示了一个简单的DFS遍历地图的例子。我们可以看到,首先定义了一个二维字符数组map
,表示地图的格子情况。同时,我们定义了一个visited
数组来记录每个格子是否被访问过。dfs
函数用递归的方式完成DFS遍历。
遍历时,我们先将当前格子设为已访问,并输出该格子对应的字符。然后分别从当前格子的四个邻居格子开始遍历,只要那个邻居格子未被访问过且不包含障碍物,就可以递归地调用dfs
函数来访问。
在本例中,我们假设地图被初始化为一个字符串数组input
,表示一个10x10的地图。我们从(1,1)的格子开始遍历地图。最后我们输出换行。
遍历地图是许多计算机科学问题的重要部分。在本文中,我们展示了如何使用C++编写一个简单的DFS遍历地图的程序。希望这篇文章能帮助您加深对遍历问题的理解和应用。