
Solução em C do Problema 9
#include <stdio.h>
#define MAX 102 /* Tamanho maximo do jogo + 2 para a moldura */
#define VERD 1
#define FALSO 0
int inicio(int A[][MAX], int i, int j);
/* prototipo da funcao inicio, declarada no fim do arquivo */
int main() {
int A[MAX][MAX], m, n;
int i, j, cont;
printf("Digite dimensoes do jogo: ");
scanf("%d %d", &m, &n);
/* Leitura da matriz */
printf("Digite a matriz linha por linha\n");
for (i = 1; i <= m; i++)
for (j = 1; j <= n; j++)
scanf("%d",&A[i][j]);
/* Preparacao de uma moldura para facilitar as contas */
for (j = 0; j <= n+1; j++){
A[0][j] = -1;
A[m+1][j]= -1;
}
for (i = 1; i <= m; i++){
A[i][0] = -1;
A[i][n+1] = -1;
}
/* Maos a obra */
cont=0;
for (i = 1; i <= m; i++)
for (j = 1; j <= n; j++)
if (inicio(A,i,j) == VERD){
cont++;
A[i][j] = cont;
}
/* Impressao do resultado */
printf("Matriz resultante:\n");
for (i = 1; i <= m; i++){
for (j = 1; j <= n; j++)
printf("%3d",A[i][j]);
printf("\n");
}
return 0;
}
int inicio(int A[][MAX], int i, int j) {
if (A[i][j] != -1 && ((A[i-1][j] == -1 && A[i+1][j] != -1) ||
(A[i][j-1] == -1 && A[i][j+1] != -1)))
return VERD;
else
return FALSO;
}
História
da Computação | Listas de
Exercícios | Problemas Resolvidos | macmulti@ime.usp.br