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;
}


Lista de Problemas

História da Computação | Listas de Exercícios | Problemas Resolvidos | macmulti@ime.usp.br