手動輸入狀態。根據以下規則計算:
1每個網格中是否存在下壹代活細胞,取決於當前與該網格相鄰的八個網格中的細胞存活情況。
當壹個活細胞周圍有2或3個活細胞時,該細胞仍會存活到下壹代;或者死亡。
當壹個網格周圍有三個活細胞時,在下壹代,活細胞將出現在網格中。
*/
公共類CellLife {
/**
* @param args
*/
公共靜態void main(String[] args) {
// TODO自動生成的方法存根
//int[][]arr = new int[5][5];//5*5棋盤
int[][] arr = {{0,1,0,1,0},{1,1,0,0},{0,0,1,1,1},{1,1,0,0,0},{0,0,1
int[][] brr = {{0,0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0,0},{0,0,0,0 } };;//狀態待機
int x,y;//記錄行和列
int CNT = 0;//記錄叠代次數
布爾標誌=真;
System.out.println("初始狀態:");
for(int I = 0;我& lt5;i++) {
for(int j = 0;j & lt5;j++)
system . out . print(arr[I][j]+" ");
system . out . println();
}
int[]nb = new int[8];//8個鄰居
while(flag) {
cnt++;
for(int I = 0;我& lt5;i++) {
for(int j = 0;j & lt5;j++) {
x = I-1;
y = j-1;
如果((x & gt= 0)& amp;& amp(y & gt=0))
nb[0]= arr[x][y];
其他
nb[0]= 0;
x = I-1;
y = j;
if(x & gt;=0)
nb[1]= arr[x][y];
其他
nb[1]= 0;
x = I-1;
y = j+1;
如果((x & gt= 0)& amp;& amp(y & lt5))
nb[2]= arr[x][y];
其他
nb[2]= 0;
x = I;
y = j-1;
如果(y & gt=0)
nb[3]= arr[x][y];
其他
nb[3]= 0;
x = I;
y = j+1;
if(y & lt;5)
nb[4]= arr[x][y];
其他
nb[4]= 0;
x = I+1;
y = j-1;
如果((x & lt5)& amp;& amp(y & gt=0))
nb[5]= arr[x][y];
其他
nb[5]= 0;
x = I+1;
y = j;
if(x & lt;5)
nb[6]= arr[x][y];
其他
nb[6]= 0;
x = I+1;
y = j+1;
如果((x & lt5)& amp;& amp(y & lt5))
nb[7]= arr[x][y];
其他
nb[7]= 0;
//判斷下壹代的狀態
int sum = 0;
for(int n = 0;n & lt8;n++)
sum = sum+nb[n];
If(arr[i][j]==1)//活細胞
if(sum==2||sum==3)
brr[I][j]= 1;
其他
brr[I][j]= 0;
Else //死細胞
if(sum==3)
brr[I][j]= 1;
其他
brr[I][j]= 0;
}
}
flag =!CellLife.same(arr,brr);
// System.out.println("下壹代狀態:");
for(int I = 0;我& lt5;i++) {
for(int j = 0;j & lt5;j++) {
arr[I][j]= brr[I][j];
//system . out . print(arr[I][j]+" ");
}
//system . out . println();
}
}
System.out.println("最終狀態:");
for(int I = 0;我& lt5;i++) {
for(int j = 0;j & lt5;j++)
system . out . print(arr[I][j]+" ");
system . out . println();
}
System.out.println("叠代次數:"+CNT);
}
public static boolean same(int[][]a,int[][] b) {
for(int I = 0;我& lt5;i++)
for(int j = 0;j & lt5;j++)
if(a[i][j]!=b[i][j])
返回false
返回true
}
}