再次解決康威的生命遊戲。平面方法工作得很好。這是非常困擾我的環形方法。我一直在審查我的代碼幾個小時了,但我找不到任何gliches。我將發佈兩個函數來計算我們數組中每個元素的鄰居數量。該數組是一個具有兩個字段的結構:Val(當前值)和Next(下一個值,取決於元素所具有的鄰居數量)。 我也應該說,每個函數都會評估位於第一行和第一行以及第一列和最後一列(包括邊)的元素。 感謝所有審閱此代碼的人,我知道這並不簡單。康威生命的遊戲 - 環形的方法 - 邊緣和角落
void verifica_lin(int i,int j,int n,int m,int &cnt,matrice a[MAX][MAX]){
if(i==1){
if(j==1){
if(a[i+1][j].Val==1)
++cnt;
if(a[i+1][j+1].Val==1)
++cnt;
if(a[2][m].Val==1)
++cnt;
if(a[n][1].Val==1)
++cnt;
if(a[n][2].Val==1)
++cnt;
if(a[n][m].Val==1)
++cnt;
if(a[1][m].Val==1)
++cnt;
if(a[i][j+1].Val==1)
++cnt;
}
else
if(j==m){
if(a[i+1][j].Val==1)
++cnt;
if(a[1][2].Val==1)
++cnt;
if(a[i+1][j-1].Val==1)
++cnt;
if(a[n][m].Val==1)
++cnt;
if(a[n][1].Val==1)
++cnt;
if(a[n][m-1].Val==1)
++cnt;
if(a[i][j-1].Val==1)
++cnt;
if(a[1][1].Val==1)
++cnt;
}
else{
if(a[i+1][j].Val==1)
++cnt;
if(a[i+1][j+1].Val==1)
++cnt;
if(a[i+1][j-1].Val==1)
++cnt;
if(a[n][j].Val==1)
++cnt;
if(a[n][j+1].Val==1)
++cnt;
if(a[n][j-1].Val==1)
++cnt;
if(a[i][j-1].Val==1)
++cnt;
if(a[i][j+1].Val==1)
++cnt;
}
}
else
if(i==n){
if(j==1){
if(a[1][1].Val==1)
++cnt;
if(a[1][2].Val==1)
++cnt;
if(a[1][m].Val==1)
++cnt;
if(a[i-1][j].Val==1)
++cnt;
if(a[i-1][j+1].Val==1)
++cnt;
if(a[n-1][m].Val==1)
++cnt;
if(a[n][m].Val==1)
++cnt;
if(a[i][j+1].Val==1)
++cnt;
}
else
if(j==m){
if(a[1][m].Val==1)
++cnt;
if(a[1][1].Val==1)
++cnt;
if(a[1][m-1].Val==1)
++cnt;
if(a[i-1][j].Val==1)
++cnt;
if(a[n-1][m].Val==1)
++cnt;
if(a[i-1][j-1].Val==1)
++cnt;
if(a[i][j-1].Val==1)
++cnt;
if(a[n][1].Val==1)
++cnt;
}
else{
if(a[1][j].Val==1)
++cnt;
if(a[1][j+1].Val==1)
++cnt;
if(a[1][j-1].Val==1)
++cnt;
if(a[i-1][j].Val==1)
++cnt;
if(a[i-1][j+1].Val==1)
++cnt;
if(a[i-1][j-1].Val==1)
++cnt;
if(a[i][j-1].Val==1)
++cnt;
if(a[i][j+1].Val==1)
++cnt;
}
}
if(a[i][j].Val==1){
if(cnt==2||cnt==3)
a[i][j].Next=1;
else
if(cnt==0||cnt>3)
a[i][j].Next=0;
}
else
if(cnt==3)
a[i][j].Next=1;
}
void verify_col(int i,int j,int n,int m,int &cnt,matrice a[MAX][MAX]){
if(j==1){
if(i==1){
if(a[i+1][j].Val==1)
++cnt;
if(a[i+1][j+1].Val==1)
++cnt;
if(a[2][m].Val==1)
++cnt;
if(a[n][1].Val==1)
++cnt;
if(a[n][2].Val==1)
++cnt;
if(a[n][m].Val==1)
++cnt;
if(a[1][m].Val==1)
++cnt;
if(a[i][j+1].Val==1)
++cnt;
}
else
if(i==n){
if(a[1][1].Val==1)
++cnt;
if(a[1][2].Val==1)
++cnt;
if(a[1][m].Val==1)
++cnt;
if(a[i-1][j].Val==1)
++cnt;
if(a[i-1][j+1].Val==1)
++cnt;
if(a[n-1][m].Val==1)
++cnt;
if(a[n][m].Val==1)
++cnt;
if(a[i][j+1].Val==1)
++cnt;
}
else{
if(a[i+1][j].Val==1)
++cnt;
if(a[i+1][j+1].Val==1)
++cnt;
if(a[i+1][m].Val==1)
++cnt;
if(a[i-1][j].Val==1)
++cnt;
if(a[i-1][j+1].Val==1)
++cnt;
if(a[i-1][m].Val==1)
++cnt;
if(a[i][m].Val==1)
++cnt;
if(a[i][j+1].Val==1)
++cnt;
}
}
else
if(j==m){
if(i==1){
if(a[i+1][j].Val==1)
++cnt;
if(a[1][2].Val==1)
++cnt;
if(a[i+1][j-1].Val==1)
++cnt;
if(a[n][m].Val==1)
++cnt;
if(a[n][1].Val==1)
++cnt;
if(a[n][m-1].Val==1)
++cnt;
if(a[i][j-1].Val==1)
++cnt;
if(a[1][1].Val==1)
++cnt;
}
else
if(i==n){
if(a[1][m].Val==1)
++cnt;
if(a[1][1].Val==1)
++cnt;
if(a[1][m-1].Val==1)
++cnt;
if(a[i-1][j].Val==1)
++cnt;
if(a[n-1][m].Val==1)
++cnt;
if(a[i-1][j-1].Val==1)
++cnt;
if(a[i][j-1].Val==1)
++cnt;
if(a[n][1].Val==1)
++cnt;
}
else{
if(a[i+1][j].Val==1)
++cnt;
if(a[i+1][1].Val==1)
++cnt;
if(a[i+1][j-1].Val==1)
++cnt;
if(a[i-1][j].Val==1)
++cnt;
if(a[i-1][1].Val==1)
++cnt;
if(a[i-1][j-1].Val==1)
++cnt;
if(a[i][j-1].Val==1)
++cnt;
if(a[i][1].Val==1)
++cnt;
}
}
if(a[i][j].Val==1){
if(cnt==2||cnt==3)
a[i][j].Next=1;
else
if(cnt==0||cnt>3)
a[i][j].Next=0;
}
else
if(cnt==3)
a[i][j].Next=1;
}
刪除C標記,這不是有效的C代碼 – UnholySheep
也請使用調試器,因爲這是太多的代碼找出具體的問題。 (更不用說,你沒有指定什麼問題,你有編譯器錯誤,運行時崩潰,錯誤的結果,...) – UnholySheep
只是nitpicking:它是_matrix_單數和_matrices_複數,所以_matrice_是不正確的。 – ForceBru