c - 动态二维矩阵实现

标签 c

除了静态矩阵之外,我尝试获取二维动态矩阵 我想做的就是更改 init 函数,而不是使用定义的高度和宽度 它将动态初始化 - 请告诉我如何进行

void init(int board[][WIDTH], int rows) {
    int x, y;
    for (y = 0; y < rows; y++)
        for (x = 0; x < WIDTH; x++)
            board[y][x] = 0;
    /* Scatter some live cells: */
    board[10][25] = 1;
    board[10][26] = 1;
    board[10][27] = 1;
    board[11][25] = 1;
    board[12][26] = 1;
}

int main(void) {  
    int board[HEIGHT][WIDTH];  
    init(board, HEIGHT);  
..
..
}  

这是我想使用的代码 - 请告诉我正确的暗示 不使用#define WIDTH 50 #define HEIGHT 20

    int **matrix_dyn(int n, int m)
    {
        int i = 0;
        int j = 0;

            printf ("please enter the horizontal size of the board \n");
        scanf ("%d", &n);

        printf ("please enter the vertical size of the board \n");
        scanf ("%d", &m);


        int **board = (int**)malloc(n * sizeof(int*));

        printf("please enter the 0's or 1's to fill the matrix \n");
        for (i = 0; i <= n; i++)
        board[i] = (int*)malloc(m*sizeof(int));

        for(i = 0; i <= n; i++)
        {
            for(j = 0; j <= m; j++)
            scanf ("%d", &board[i][j]);
        }
        return board;
    }

这是我的全部代码:

    #include <stdio.h>
    #define WIDTH 50
    #define HEIGHT 20

    void init(int board[][WIDTH], int rows) {
        int x, y;
        for (y = 0; y < rows; y++)
            for (x = 0; x < WIDTH; x++)
                board[y][x] = 0;
        /* Scatter some live cells: */
        board[10][25] = 1;
        board[10][26] = 1;
        board[10][27] = 1;
        board[11][25] = 1;
        board[12][26] = 1;
    }


    void print(int board[][WIDTH], int rows, int cols) 

    {
        int x, y;
        char c;
        for (y = 0; y < rows; y++) {
            for (x = 0; x < cols; x++) {
             if (board[y][x] == 1)
                    printf("X");
                else
                    printf(" ");
            }
            printf("\n");
        }
        printf("Press any key to continue:\n");
        getchar();
    }


    int count_neighbors(int board[][WIDTH], int rows, 
            int y, int x)
    {
        int i, j;
        int result = 0;
        for (i = -1; i <= 1; i++)
            if ((y+i >= 0) && (y+i < rows))
                for (j = -1; j <= 1; j++)
                    if ((x+j >= 0) && (x+j < WIDTH))
                        if ((i != 0) || (j != 0))
                            result += board[y+i][x+j];
        return result;
    }



    int step(int board[][WIDTH], int rows) { // now returns a bool
        int x, y; 
        int neighbors[HEIGHT][WIDTH]; 
        int changed = 0; // save changes
        for (y = 0; y < rows; y++) 
            for (x = 0; x < WIDTH; x++) 
                neighbors[y][x] = count_neighbors(board, rows, y, x); 
        for (y = 0; y < rows; y++) 
            for (x = 0; x < WIDTH; x++) 
                if (board[y][x] == 1) { /* Currently alive */ 
                    if (neighbors[y][x] < 2) 
                    {
                        board[y][x] = 0; /* Death by boredom */ 
                        changed = 1; // change happened
                    }
                    else if (neighbors[y][x] > 3) 
                    {
                        board[y][x] = 0; /* Death by overcrowding */ 
                        changed = 1; // change happened
                    }
                } 
                else { /* Currently empty */ 
                    if (neighbors[y][x] == 3) 
                    {
                        board[y][x] = 1; 
                        changed = 1; // change happened
                    }
                } 
        return changed; // return the status (changed yes/no?)
    } 


    int main(void) {  
        int board[HEIGHT][WIDTH];  
        init(board, HEIGHT);  
        while (1) {  
            print(board, HEIGHT, WIDTH);
            if(step(board, HEIGHT) == 0) // no change
                break; // leave the loop
        }  
        return 0;  
    }  

最佳答案

像这样声明和分配董事会:

int *board = malloc( n * m * sizeof(int) );

然后,每当您希望访问 board[x][y] 时,请使用以下表达式:

board[y*n+x]

关于c - 动态二维矩阵实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8963963/

相关文章:

c - 如果我创建一个原子变量,线程之间对该变量的所有操作都是原子的吗?

c++ - 如何检测无符号整数溢出?

比较从文件中读取的字符串

c - 类似于 C 的 Javadoc ?完整的库文档

c - C中的指针数组实现

c - 如何从 xmega 读取输入然后将其显示在 super 终端上

c - 任何像一个函数的多个实例

c++ - 优化稀疏矩阵中的对数熵计算

c++ - 格式化 IO 函数 (*printf/*scanf) 中的转换说明符 %i 和 %d 有什么区别

检查数组的出现次数并输出到新数组。 C