鱼C论坛

 找回密码
 立即注册
查看: 1340|回复: 2

[已解决]代码题目求助大佬

[复制链接]
发表于 2023-10-26 23:45:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

int n, m, k;
char a[15][15][15];
int vis[15][15][15];
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[x][y][z] = 1;
        while (!q.empty()) {
                node t = q.front();
                q.pop();
                for (int i = 0; i < 6; i++) {
                        int tx = t.x + dx[i];
                        int ty = t.y + dy[i];
                        int tz = t.z + dz[i];
                        if (tx < 1 || tx > k || ty < 1 || ty > n || tz < 1 || tz > m) continue;
                        if (!vis[tx][ty][tz] && a[tx][ty][tz] != '#') {
                                node t1;
                                t1.x = tx; t1.y = ty; t1.z = tz;
                                ans++;
                                q.push(t1);
                                vis[tx][ty][tz] = 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[i][j][k];
                        }
        cin >> im >> in;
        a[1][in][im] = '.';//泄露实验室一定为'.'
        bfs(1, in, im);
        cout << ans;

}
谢谢大佬回复。
最佳答案
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][j][l];
            }
    cin >> im >> in;
    a[1][in][im] = '.'; // 泄露实验室一定为'.'
    bfs(1, in, im);
    cout << ans;
}

请注意,我将内部的循环变量名从k改为了l,以避免与外部的k变量重名。
2762d10cc61f5f9acab0511ab8513c3.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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][j][l];
            }
    cin >> im >> in;
    a[1][in][im] = '.'; // 泄露实验室一定为'.'
    bfs(1, in, im);
    cout << ans;
}

请注意,我将内部的循环变量名从k改为了l,以避免与外部的k变量重名。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-26 23:45:25 | 显示全部楼层
根据您提供的代码,有几个地方可能出现问题:

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

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

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

请注意修改上述问题并重新运行代码以查看是否解决了您遇到的问题。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 08:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表