📌  相关文章
📜  C ++程序用于矩阵或网格中两个单元格之间的最短距离(1)

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

C++程序用于矩阵或网格中两个单元格之间的最短距离

本文将介绍如何在C ++中实现一个算法,以计算在矩阵或网格中两个单元格之间的最短距离。

算法原理

我们可以使用经典的广度优先搜索算法(BFS)来解决这个问题。该算法可以帮助我们找到从起点到终点的最短路径,而在矩阵或网格中,每个单元格可以视为一个节点,并且每个单元格之间的距离可以视为边的权重。

C++代码实现

以下是使用C ++实现BFS算法的代码。您可以将该代码插入到您的项目中,以便在需要时计算两个单元格之间的最短距离。

#include<iostream>
#include<queue>
#include<vector>
using namespace std;

int shortest_distance(vector<vector<int>> matrix, pair<int, int> start, pair<int, int> end) {
    queue<pair<int, int>> q;
    q.push(start);

    int dist[matrix.size()][matrix[0].size()];
    for (int i = 0; i < matrix.size(); i++) {
        for (int j = 0; j < matrix[0].size(); j++) {
            dist[i][j] = -1;
        }
    }
    dist[start.first][start.second] = 0;

    while (!q.empty()) {
        pair<int, int> curr = q.front();
        q.pop();

        int dx[4] = {0, 0, -1, 1};
        int dy[4] = {-1, 1, 0, 0};
        for (int i = 0; i < 4; i++) {
            int x = curr.first + dx[i];
            int y = curr.second + dy[i];

            if (x < 0 || x >= matrix.size() || y < 0 || y >= matrix[0].size() || matrix[x][y] == 0 || dist[x][y] != -1) {
                continue;
            }

            dist[x][y] = dist[curr.first][curr.second] + 1;
            q.push(make_pair(x, y));
        }
    }

    return dist[end.first][end.second];
}

int main() {
    vector<vector<int>> matrix = {{1, 1, 1, 1}, {0, 1, 0, 1}, {1, 1, 1, 1}, {1, 0, 1, 1}};
    pair<int, int> start = make_pair(0, 0);
    pair<int, int> end = make_pair(3, 3);

    int shortest = shortest_distance(matrix, start, end);

    cout << "Shortest Distance: " << shortest << endl;

    return 0;
}
代码解析

在上面的代码中,我们首先定义了一个名为shortest_distance的函数,该函数接受以下参数:

  • vector<vector<int>> matrix:一个包含整数值的二维向量,代表矩阵或网格
  • pair<int, int> start:表示起始单元格的坐标
  • pair<int, int> end:表示目标单元格的坐标

其次,我们使用一个队列对象,即STL中的queue类来实现广度优先搜索。在算法的开始,我们先初始化dist数组,该数组用于跟踪每个单元格的最短距离。对于每个单元格,如果其尚未被访问,则将其距离设置为-1。

接下来,我们向队列对象中插入起始单元格,并设置起始单元格的距离为0。接着,我们遍历队列,找到邻居单元格,并将距离数组中的对应值设置为当前单元格的距离+1。最后,我们返回目标单元格的距离值。

main函数中,我们定义了一个名为matrix的矩阵对象,并设置了起始单元格和目标单元格坐标。我们调用shortest_distance函数,并在控制台上输出最短距离的值。

总结

我们已经介绍了如何使用C ++编写算法来查找矩阵或网格中两个单元格之间的最短距离。您可以使用此代码作为基础,并扩展它以满足您的特定需求。