永远Forever 发表于 2023-10-26 23:45:03

代码题目求助大佬

题目如图,代码如下
立体迷宫的bfs代码有几个点没过去,求助一下看下哪个点漏了。
#include<bits/stdc++.h>
using namespace std;

int n, m, k;
char a;
int vis;
int dz[] = { 0,0,0,0,1,-1 }; int dy[] = { 0,0,1,-1,0,0 }; int dx[] = { 1,-1,0,0,0,0 };
int ans = 1;
typedef struct node {
        int x, y, z;
}node;
queue<node> q;


void bfs(int x, int y, int z) {
        node t;
        t.x = x; t.y = y; t.z = z;
        q.push(t);
        vis = 1;
        while (!q.empty()) {
                node t = q.front();
                q.pop();
                for (int i = 0; i < 6; i++) {
                        int tx = t.x + dx;
                        int ty = t.y + dy;
                        int tz = t.z + dz;
                        if (tx < 1 || tx > k || ty < 1 || ty > n || tz < 1 || tz > m) continue;
                        if (!vis && a != '#') {
                                node t1;
                                t1.x = tx; t1.y = ty; t1.z = tz;
                                ans++;
                                q.push(t1);
                                vis = 1;

                        }
                }
        }

}

int main() {
        cin >> n >> m >> k;
        int im, in;//起点
        for (int i = 1; i <= k; i++)
                for (int j = 1; j <= n; j++)
                        for (int k = 1; k <= m; k++)
                        {
                                cin >> a;
                        }
        cin >> im >> in;
        a = '.';//泄露实验室一定为'.'
        bfs(1, in, im);
        cout << ans;

}
谢谢大佬回复。

isdkz 发表于 2023-10-26 23:45:13

你的代码中有一个明显的错误。在你的bfs函数中,你使用了一个名为k的变量作为循环变量,但是这个变量与外部的k变量重名,导致在循环过程中无法正确访问外部的k变量。为了解决这个问题,你需要修改内部的循环变量名,例如将其改为j。修改后的代码如下:

int main() {
    cin >> n >> m >> k;
    int im, in; // 起点
    for (int i = 1; i <= k; i++)
      for (int j = 1; j <= n; j++)
            for (int l = 1; l <= m; l++) {
                cin >> a[ i];
            }
    cin >> im >> in;
    a = '.'; // 泄露实验室一定为'.'
    bfs(1, in, im);
    cout << ans;
}


请注意,我将内部的循环变量名从k改为了l,以避免与外部的k变量重名。

陶远航 发表于 2023-10-26 23:45:25

根据您提供的代码,有几个地方可能出现问题:

1. 在for循环中,使用了内部变量k作为循环变量,这会导致与外部声明的全局变量k冲突。建议将内部循环变量改名,例如更改为kk。

2. vis数组应该在主函数之前初始化为0。可以在主函数开始之前添加一行代码:memset(vis, 0, sizeof(vis));

3. 根据代码逻辑,立体迷宫的三个维度分别是k、n和m,因此在判断条件中应该是tx > k、ty > n和tz > m,而不是反过来。

请注意修改上述问题并重新运行代码以查看是否解决了您遇到的问题。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: 代码题目求助大佬