📜  遍历地图 - C++ (1)

📅  最后修改于: 2023-12-03 14:58:08.905000             🧑  作者: Mango

遍历地图 - C++

简介

在许多计算机科学应用中,需要遍历地图或网络。遍历问题可以用很多方法解决,例如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遍历地图的程序。希望这篇文章能帮助您加深对遍历问题的理解和应用。