凯H 2023-06-04 16:34 采纳率: 81%
浏览 37

随机生成迷宫的代码有什么问题


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//定义迷宫大小
#define ROW 10
#define COL 10

//定义节点状态
#define WALL 0
#define PATH 1

//初始化迷宫
int maze[ROW][COL]={0};
//给第一个元素赋初值0,其他元素也会被赋为0,因为C语言规定未显式初始化的静态和全局变量类型默认值为0
//生成迷宫
void createMaze(int row, int col) {
    //设置起点和终点
    maze[0][0] = PATH;
    maze[row - 1][col - 1] = PATH;


    //设置当前位置和方向
    int x = 0, y = 0, dir = 0;

    //定义四个方向上的偏移量
    int dx[4] = {0, 1, 0, -1};
    int dy[4] = {-1, 0, 1, 0};
//这段代码定义了两个整型数组 dx和dy,分别包含了四个数字 {0, 1, 0, -1}和 {-1, 0, 1, 0}。这两个数组通常被用作表示在平面上四个方向的位移量(偏移量)。
数组 dx 存储的是按照“上、右、下、左”(或“北、东、南、西”)方向进行移动时,对应横坐标(或列数)的位移量。具体来说,当进行 “向右移动” 时,横坐标(列数)应该增加1,因此对应的偏移量是dx[1] = 1,而在向左移动时,横坐标应该减少1,所以对应的偏移量是 dx[3] = -1。
同理,“向下移动” 时纵坐标(或行数)增加1,对应的位移量是 dy[2] = 1,而“向上移动” 时纵坐标减少1,对应的位移量是 dy[0] = -1。
这种数组存储模式在解决表示图像中的像素或表示二维平面上的图形对象等问题时常常会被用到。通过在代码中使用这样的数组来表示平面上的移动方向,可以使代码更加清晰易读和易于编写。

    //随机生成路径
    while (1) {
        //寻找当前节点的邻居节点
        int neighbor[4] = {0};
        int count = 0;
        int i;
        for ( i = 0; i < 4; i++) 
         {
            int nx = x + dx[i];
            int ny = y + dy[i];
            if (nx >= 0 && nx < row && ny >= 0 && ny < col && maze[nx][ny] == WALL) {
                neighbor[count++] = i;
            }
         }

        //如果当前节点没有可访问的邻居节点,则回溯
        if (count == 0) 
{
            int flag = 0;
            int i;
            for (i = 0; i < 4; i++) 
{
                int nx = x + dx[i];
                int ny = y + dy[i];
                if (nx >= 0 && nx < row && ny >= 0 && ny < col && maze[nx][ny] == PATH) 
{
                    x = nx;
                    y = ny;
                    flag = 1;
                    break;
     }
            }
            if (flag == 0) break;
        }

        //随机选择一个邻居节点
        int index = neighbor[rand() % count];
        x += dx[index];
        y += dy[index];
        maze[x][y] = PATH;
    }
}

//打印迷宫
void printMaze(int row, int col) {
    int i,j;
    for (i = 0; i < row; i++) {
        for ( j = 0; j < col; j++) {
            if (maze[i][j] == WALL) printf("■");
            else if (maze[i][j] == PATH) printf("  ");
        }
        printf("\n");
    }
}

int main() {
    srand(time(NULL)); //初始化随机数生成器
    createMaze(ROW, COL);
    printMaze(ROW, COL);
    return 0;
}

退出代码为3221225620

  • 写回答

2条回答 默认 最新

  • 叶灼hua 2023-06-04 17:50
    关注

    退出代码3221225620是一个十六进制数,转换成十进制数是-1073740796。这个退出代码通常表示程序发生了异常,比如访问了非法的内存地址或者发生了除以零等错误。这种错误通常被称为“段错误”或“访问冲突”。你可以检查一下你的代码,看看是否有数组越界、指针未初始化等问题。另外,你也可以使用调试工具来帮助你找到问题所在。

    评论

报告相同问题?

问题事件

  • 修改了问题 6月4日
  • 创建了问题 6月4日

悬赏问题

  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验
  • ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
  • ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图
  • ¥15 栅极驱动低侧烧毁MOSFET
  • ¥30 写segy数据时出错3
  • ¥100 linux下qt运行QCefView demo报错
  • ¥50 F1C100S下的红外解码IR_RX驱动问题