如何在 C 中初始化 3d 数组 - 指针数组数组



我正在编写一个生成下一个可能动作的游戏。我需要生成下一个动作才能执行搜索。但是我不知道如何在 C 中做到这一点。

生成开发板的代码为:

#include <stdio.h> //prints 
#include <stdbool.h> //bool
#include <stdlib.h>  //malloc 
static const int BOARD_SIZE = 6;
typedef int **BOARD;
void print_board(BOARD b){
int i,j;
printf("BOARD array is:n");
for (i=0; i<BOARD_SIZE; i++) {
for (j=0; j<BOARD_SIZE; j++){
printf("%d ",b[i][j]);
}
printf("n");
}
}
BOARD set_game(){
//set board
//all the squares starts with 2 
int i, j;
BOARD b = malloc(sizeof(int *) * BOARD_SIZE);
for (i = 0; i < BOARD_SIZE; i++){
b[i] = malloc(sizeof(int) * BOARD_SIZE);
}
for (i=0; i<BOARD_SIZE; i++) {
for (j=0; j<BOARD_SIZE; j++){
//position player 0 peons
if(j == 0){
b[i][j] = 0;
}
//position player 1 peons
else if(j == BOARD_SIZE-1){
b[i][j] = 1;
}else{
b[i][j] = 2;
}
}
}
print_board(b);
return b;
}
// Game
int main(){
// a pointer to an int.
BOARD p, board;
p = set_game();
board = board_status(p);
return 0;
}

它打印:

BOARD array is:
0 2 2 2 2 1 
0 2 2 2 2 1 
0 2 2 2 2 1 
0 2 2 2 2 1 
0 2 2 2 2 1 
0 2 2 2 2 1

我现在需要制作一个数组数组,以生成所有可能的下一个棋盘,例如,当玩家 0 从 b[0][0] 移动到 b[0][1] 时,这是分支的一个叶子。

BOARD array is:
2 0 2 2 2 1
0 2 2 2 2 1 
0 2 2 2 2 1 
0 2 2 2 2 1 
0 2 2 2 2 1 
0 2 2 2 2 1

我应该如何分配此阵列? 我需要一组具有所有其他board_status的分支,然后我将执行搜索。 我不确定数组的类型,如何声明它?它将是一个董事会数组?

我尝试使用这种方法,我在这里找到,但似乎有问题。它给了我一个错误:

从类型"int"数组[i] = b[i][j]分配给类型"分支"时不兼容的类型;

//generate ALL possible moves
void generatePossibleMoves(int player){
int i, j;
typedef struct
{
int BOARD[BOARD_SIZE];
} branches;
branches** array = NULL;
void InitBranches( int num_elements )
{
array = malloc( sizeof( branches ) * num_elements);
if( !array )
{
printf( "errorn" );
exit( -1 );
}
for(i = 0; i < num_elements; i++ )
{
for(j = 0; j < BOARD_SIZE; j++ )
{
BOARD b = set_game();
array[i] = b[i][j];
printf("%d", array[i]);
}
printf("n");
}
}
InitBranches(4);

}

请问谁能帮我?谢谢。

你不应该在函数中有一个函数,InitBranches移出generatePossibleMoves。此外,typedef struct应该在函数之外。

您的array声明和malloc不匹配,您应该删除声明中的*或在sizeof中添加一个。

只是猜测你想做什么:

BOARD* InitBranches( int num_elements )
{
int i;
BOARD* array = malloc(num_elements * sizeof *array);
if( !array )
{
printf( "errorn" );
exit( -1 );
}
for(i = 0; i < num_elements; i++ )
{
array[i] = set_game();
}
return array;
}
void generatePossibleMoves(int player){
BOARD* array = InitBranches(4);
//do your moves here
}

这将创建您的董事会的 4 个分支array[0]直到array[3].

相关内容

  • 没有找到相关文章

最新更新