You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何动态创建未知大小的N皇后问题棋盘?

动态创建N皇后棋盘的实现方案

当然可以动态创建未知大小的棋盘,你当前使用的是固定大小的栈上二维数组,要适配从文件读取的N值,有几种实用的实现方式:

方法1:C语言动态分配二维数组

先从文件读取N的数值,再通过malloc分两步分配内存:

#include <stdlib.h>

// 假设已从文件读取得到N的值
int N;
// 读取文件逻辑...

// 第一步:分配存储行指针的数组
int **board = (int **)malloc(N * sizeof(int *));
if (board == NULL) {
    // 处理内存分配失败
    return 1;
}

// 第二步:为每一行分配列内存并初始化
for (int i = 0; i < N; i++) {
    board[i] = (int *)malloc(N * sizeof(int));
    if (board[i] == NULL) {
        // 分配失败时回滚已分配的内存
        for (int j = 0; j < i; j++) {
            free(board[j]);
        }
        free(board);
        return 1;
    }
    // 将当前行所有元素初始化为0
    for (int j = 0; j < N; j++) {
        board[i][j] = 0;
    }
}

// 使用完成后释放内存
for (int i = 0; i < N; i++) {
    free(board[i]);
}
free(board);

方法2:一维数组模拟二维棋盘

如果觉得二维分配的代码繁琐,可以用一维数组模拟,通过i * N + j计算索引来访问二维位置:

#include <stdlib.h>

int N;
// 读取文件逻辑...

int *board = (int *)malloc(N * N * sizeof(int));
if (board == NULL) {
    return 1;
}

// 初始化所有元素为0
for (int i = 0; i < N * N; i++) {
    board[i] = 0;
}

// 访问第i行第j列的元素:board[i * N + j]

// 释放内存
free(board);

关键注意事项

  • 动态分配的内存必须手动释放,否则会造成内存泄漏
  • 每次调用malloc后都要检查返回值,避免空指针访问
  • 如果使用C++开发,直接用vector<vector<int>> board(N, vector<int>(N, 0))即可,无需手动管理内存

内容的提问来源于stack exchange,提问作者ash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:35:27