给出一个n行n列的01矩阵,它们代表着一个细胞群。每个数字代表一个细胞,数字‘1’代表当前细胞是活的,‘0’代表当前细胞是死的。问题来了:如果一个细胞周围的活细胞小于等于2,那么这个细胞会由于过于孤独而死去,如果它周围的活细胞数大于6,它又会因为营养不足而死去。反之,如果它周围的活细胞数目在3到6之间,那么它就一定是一个活细胞,注意,一个细胞在下一秒是否存活只取决于它周围的活细胞数目,而跟它当前是否存活无关。
输入格式 输入文件名:sheng.in第一行为正整数n(≤10),接下来n行n列的01矩阵,表示当前细胞的生存情况。
输出格式 输出文件名:sheng.out一个n行n列的01矩阵,表示下一秒细胞的生存情况。
输入/输出例子1输入:
5
01010
10101
01010
10101
01010
输出:
00100
01110
11111
01110
00100
#includeusing namespace std; const int cellx[8]={0,1,1,1,0,-1,-1,-1},celly[8]={1,1,0,-1,-1,-1,0,1}; //控制方向 int min1[15][15],min2[15][15]; //one minute ago and in one minute int n; char c; int main(){ freopen("sheng.in","r",stdin); freopen("sheng.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){ cin>>c; //输入为字符串 min1[i][j]=c-48; //将字符串转化为1或0 } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){ int sum=0; for(int k=0;k<8;k++) if(min1[i+cellx[k]][j+celly[k]]) sum++; //判断周围活细胞个数 if(sum>2&&sum<=6) min2[i][j]=1; else min2[i][j]=0; } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) printf("%d",min2[i][j]); printf("n"); } return 0; }



