我正在進行一維生命遊戲(基於此處在Mathworld處列出的規則)。實質上,每一代都被表示爲一行0或1(死或活),並且下一代是基於「規則」命令行參數的二進制表示形式創建的。從二維C數組中獲取前一行「值」的值
例如,規則30變爲00011110(二進制爲30),這用於確定哪些位模式會在隨後的代中產生新的單元或死掉。
爲了對此進行編程,我需要能夠從上一行訪問三個組中的位(用於應用規則)。下面是樣本圖像(注意,開始行總是爲0的與中央1):
00000100000 #seed row
11001011001 #generated from seed row
...........
11110010101 #n-th row, generated from n-1 row
爲了產生一排,我必須着眼於從該行中,比特以上三個,然後組將規則應用爲1/0,生/死決定。
基本上我打算匹配3位模式和規則,並使用它打印後代的0或1。這是一般算法:
if three_bit_pattern == 'xxx' && rule[x] == 0/1 {print 0/1} else {print 1/0}
我遇到困難的程序部分是訪問前一行的內容。我所有的嘗試都會產生垃圾或錯誤的數據
總之,我將如何訪問三位組的前一行的值?
該行創建這樣的:
int i, j, k;
int row = atoi(argv[1]) + 1;
int col = 2 * atoi(argv[1]) + 1;
int arr[col];
int output[col];
char rule[9]; //binary representation of rule (2^8 stores up to 255 + null term)
int2binary(atoi(argv[2]), &rule, 10);
for(i = 0; i < row; i++){
for(j = 0; j < col; j++){
if(i == 0){
if(j == col/2) //print 1 in center of first row
arr[i] = 1;
else
arr[i] = 0;
printf("%d", arr[i]);
}
else{
//output[i] = arr[i-1];
output[i+1] = arr[i];
output[i+2] = arr[i+1];
output[i+3] = arr[i+2];
printf("%s", output);
}
}//end inner for_loop
printf("\n");
}//end outer for_loop
}
好了,所以我做了這個一大堆簡單,我只是將不得不兩個數組(一個保持前柱和一個與當前)。我不明白的是爲什麼打印輸出數組產生垃圾?是輸出[我] = arr [我]不是一個有效的表達式?
您不顯示不起作用的代碼。完全不可能明白爲什麼一段看不見的代碼不起作用。顯示所有的代碼。 –
那麼,它的行索引叫做「行」還是「我」?對於第一行,我可能會使用0;等待引入一個變量,直到值需要變化。 –
的確如此。現在我沒有任何代碼(我一直在進行非工作嘗試),但我會編輯帖子以反映一些嘗試。 –