一维的情况,你给的条件不对,我在程序里标注了,你想好后在相应的地方改了就行了。
程序代码:
程序代码:#include <stdio.h>
int array[22]= {0}; //点号状态
int sum[22]= {0}; //点号周围八个点状态
int num=0;
void array_around_left(int x,int y);
void array_around_right(int x,int y);
void array_generation(int x); //进行下一代
void array_printf(void);
int main()
{
int i,k;
while(1)
{
scanf("%d",&i);
if(i==-1)
break;
else
array[i]=1;
}
scanf("%d",&num);
array_printf();
for(k=0; k<num; k++)
{
for(i=1; i<=20; i++)
{
sum[i]=0;
array_around_left(i,i); //统计数据
array_around_right(i,i); //统计数据
printf("%d ",sum[i]); //调试打印,后期删除
}
printf("\n"); //调试打印,后期删除
for(i=1; i<=20; i++)
array_generation(i); //进行下一代
array_printf();
}
return 0;
}
void array_around_left(int x,int y)
{
if(array[x-1])
{
sum[y]++;
array_around_left(x-1,y);
}
}
void array_around_right(int x,int y)
{
if(array[x+1])
{
sum[y]++;
array_around_right(x+1,y);
}
}
void array_generation(int x)
{
if(array[x])
{
if(sum[x]==2||sum[x]==4) //活着的邻居数
array[x]=1;
else
array[x]=0;
}
else
{
if(sum[x]==3||sum[x]==3) //死的邻居数
array[x]=1;
else
array[x]=0;
}
}
void array_printf() //打印
{
int i;
for(i=1; i<=20; i++)
{
if(array[i])
printf("*");
else
printf("-");
}
printf("\n\n");
}

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。

