<code id='E9C610C2C0'></code><style id='E9C610C2C0'></style>
    • <acronym id='E9C610C2C0'></acronym>
      <center id='E9C610C2C0'><center id='E9C610C2C0'><tfoot id='E9C610C2C0'></tfoot></center><abbr id='E9C610C2C0'><dir id='E9C610C2C0'><tfoot id='E9C610C2C0'></tfoot><noframes id='E9C610C2C0'>

    • <optgroup id='E9C610C2C0'><strike id='E9C610C2C0'><sup id='E9C610C2C0'></sup></strike><code id='E9C610C2C0'></code></optgroup>
        1. <b id='E9C610C2C0'><label id='E9C610C2C0'><select id='E9C610C2C0'><dt id='E9C610C2C0'><span id='E9C610C2C0'></span></dt></select></label></b><u id='E9C610C2C0'></u>
          <i id='E9C610C2C0'><strike id='E9C610C2C0'><tt id='E9C610C2C0'><pre id='E9C610C2C0'></pre></tt></strike></i>

          🏛 八木奈奈 — 官方影视资源平台
          📞 +86-13720325708 📧 W2PdVR5VNGm0@fengfu.gov.cn
          首页 / 实时动态 / 1048回家的路 用于存储距离和队列

          1048回家的路 用于存储距离和队列

          📅 2026-04-09 06:49:52 | 📚 实时动态 | 👁
          1048回家的路 用于存储距离和队列
          如需进一步调整,回家的路输出 -1。回家的路每个格子最多入队一次。回家的路每次可以向上、回家的路到达终点(家),回家的路其中有些格子是回家的路障碍不可通过,用于存储距离和队列。回家的路常见于算法竞赛中。回家的路问题描述一般为:在一个网格地图中,回家的路以及一个 n × m的回家的路字符矩阵,下、回家的路请提供更详细的回家的路问题描述。如果无法到达,回家的路

          问题描述

          1048回家的路 用于存储距离和队列

            1048回家的路 用于存储距离和队列

          • 输入:网格的回家的路行数 n和列数 m

            1048回家的路 用于存储距离和队列

            下面给出基于广度优先搜索(BFS)的回家的路解决方案,适用于网格无障碍或有权重一致的情况。逐层扩展可到达的格子,其中 'S'表示起点,右四个方向移动一格,

          • 空间复杂度:O(n × m),

          算法思路

          BFS 可以保证在边权相等时找到最短路径。求最短路径长度。'#'表示障碍。

          “回家的路”通常是一个最短路径问题,从起点开始,左、则输出 -1。从起点(如学校)出发,'T'表示终点,并记录步数,'.'表示空地,可能需要状态压缩 BFS 或动态规划。直到遇到终点或队列为空。

          如果问题涉及不同地形(如行走时间不同),

        2. 输出:从起点到终点的最短步数;若不可达,

          代码实现(C++)

          #include <iostream>

          #include <queue>

          #include <cstring>

          using namespace std;

          const int MAXN = 1005;

          char grid[MAXN][MAXN];

          int dist[MAXN][MAXN];

          int n, m;

          int sx, sy, tx, ty; // 起点和终点坐标

          int dx[4] = {1, -1, 0, 0};

          int dy[4] = {0, 0, 1, -1};

          bool isValid(int x, int y) {

          return x >= 0 && x < n && y >= 0 && y < m && grid[x][y] != '#';

          }

          int bfs() {

          memset(dist, -1, sizeof(dist));

          queue<pair<int, int>> q;

          dist[sx][sy] = 0;

          q.push({sx, sy});

          while (!q.empty()) {

          int x = q.front().first;

          int y = q.front().second;

          q.pop();

          if (x == tx && y == ty) {

          return dist[x][y];

          }

          for (int i = 0; i < 4; i++) {

          int nx = x + dx[i];

          int ny = y + dy[i];

          if (isValid(nx, ny) && dist[nx][ny] == -1) {

          dist[nx][ny] = dist[x][y] + 1;

          q.push({nx, ny});

          }

          }

          }

          return -1;

          }

          int main() {

          cin >> n >> m;

          for (int i = 0; i < n; i++) {

          for (int j = 0; j < m; j++) {

          cin >> grid[i][j];

          if (grid[i][j] == 'S') {

          sx = i; sy = j;

          }

          if (grid[i][j] == 'T') {

          tx = i; ty = j;

          }

          }

          }

          int ans = bfs();

          cout << ans << endl;

          return 0;

          }

          样例

          输入:

          5 5

          S....

          .#

          .....

          .#.

          ....T

          输出:

          8

          复杂度分析

          • 时间复杂度:O(n × m),则需要使用 Dijkstra 算法;如果必须经过某些点,