创建新变量并进行嵌套循环

时间:2012-01-22 11:26:07

标签: c

我已经完成了所有的代码并坚持了这个愚蠢的事情:当上一代与新版本相同时,我无法停止打印...所以当打印图案与之前的图案相同时应该停止。

我需要在调用'step'之前复制电路板,然后比较新的和复制的电路板,只有在它已经改变时才打印 我需要创建一个新的变量就像我执行board [],然后创建一个嵌套循环,就像打印一样,内部做newboard [y] [x] = board [y] [x]

请帮我这个我无法停止打印它始终保持打印。 请告诉我你的语法

void step(int board[][WIDTH], int rows) {
    int x, y;
    int neighbors[HEIGHT][WIDTH];
    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 */
                else if (neighbors[y][x] > 3)
                    board[y][x] = 0; /* Death by overcrowding */
            }
            else { /* Currently empty */
                if (neighbors[y][x] == 3)
                    board[y][x] = 1;
            }
}

1 个答案:

答案 0 :(得分:1)

您只需跟踪更改即可。与复制和比较整个数组相比,工作相当简单,工作量少(执行/内存方式):

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;  
}  

编辑: 如果需要,您还可以计算实际的更改(而不是只是说是/否)并返回更改的数量。可能会保持几乎相同。