1
+ #include <stdio.h>
2
+
3
+ void LeMatriz (int l , int c , char mat [l ][c ]);
4
+ void ImprimeMatriz (int l , int c , char mat [l ][c ]);
5
+ void Simula (int tam , char mat [tam ][tam ], int passos );
6
+ int QtdVizinhos (int tam , char mat [tam ][tam ], int i , int j );
7
+
8
+ int tam , passos ;
9
+
10
+ int main () {
11
+ scanf ("%d %d\n" , & tam , & passos );
12
+ char matriz [tam ][tam ];
13
+
14
+ LeMatriz (tam , tam , matriz );
15
+ Simula (tam , matriz , passos );
16
+ ImprimeMatriz (tam , tam , matriz );
17
+ return 0 ;
18
+ }
19
+
20
+ void LeMatriz (int l , int c , char mat [l ][c ]) {
21
+ int i , j ;
22
+
23
+ for (i = 0 ; i < l ; i ++ ) {
24
+ for (j = 0 ; j < c ; j ++ ) {
25
+ scanf ("%c" , & mat [i ][j ]);
26
+ }
27
+ scanf ("%*c" );
28
+ }
29
+ }
30
+
31
+ void ImprimeMatriz (int l , int c , char mat [l ][c ]) {
32
+ int i , j ;
33
+
34
+ for (i = 0 ; i < l ; i ++ ) {
35
+ for (j = 0 ; j < c ; j ++ ) {
36
+ printf ("%c" , mat [i ][j ]);
37
+ }
38
+ printf ("\n" );
39
+ }
40
+ }
41
+
42
+ void Simula (int tam , char mat [tam ][tam ], int passos ) {
43
+ int i , j , qtdVizinhos ;
44
+ int t ;
45
+ char proxMat [tam ][tam ];
46
+
47
+ //ImprimeMatriz(tam, tam, mat);
48
+
49
+ for (t = 1 ; t <= passos ; t ++ ) {
50
+ for (i = 0 ; i < tam ; i ++ ) {
51
+ for (j = 0 ; j < tam ; j ++ ) {
52
+ proxMat [i ][j ] = mat [i ][j ];
53
+ }
54
+ }
55
+
56
+ for (i = 0 ; i < tam ; i ++ ) {
57
+ for (j = 0 ; j < tam ; j ++ ) {
58
+ qtdVizinhos = QtdVizinhos (tam , mat , i , j );
59
+ //printf("'%d'", qtdVizinhos);
60
+ if (mat [i ][j ] == '0' ) {
61
+ if (qtdVizinhos == 3 ) {
62
+ proxMat [i ][j ] = '1' ;
63
+ }
64
+ } else {
65
+ if (!(qtdVizinhos == 2 || qtdVizinhos == 3 )) {
66
+ proxMat [i ][j ] = '0' ;
67
+ }
68
+ }
69
+ }
70
+ }
71
+ //ImprimeMatriz(tam, tam, proxMat);
72
+ //printf("\n");
73
+ for (i = 0 ; i < tam ; i ++ ) {
74
+ for (j = 0 ; j < tam ; j ++ ) {
75
+ mat [i ][j ] = proxMat [i ][j ];
76
+ }
77
+ }
78
+ }
79
+ }
80
+
81
+ int QtdVizinhos (int tam , char mat [tam ][tam ], int i , int j ) {
82
+ int k , l ;
83
+ int vizinhos = 0 ;
84
+
85
+ for (k = -1 ; k <= 1 ; k ++ ) {
86
+ for (l = -1 ; l <= 1 ; l ++ ) {
87
+ if (mat [i + k ][j + l ] == '1' ) {
88
+ if (k || l )
89
+ if ((i + k < tam && i + k >= 0 ) && (j + l < tam && j + l >= 0 ))
90
+ vizinhos ++ ;
91
+ }
92
+ }
93
+ }
94
+ return vizinhos ;
95
+ }
0 commit comments