Opgaver i denne lektion   Gå til annoteret slide, hvor denne opgave er tilknyttet -- Tastaturgenvej: 'u'   Alfabetisk indeks   Kursets hjemmeside   

Opgaveløsning:
Opgave 1 side 587 i PSPD(8ed) - blob_count


Herunder finder du en udgave af programmet. Der findes en video, som viser hvordan jeg har udviklet løsningen. Pt. er løsningen som udvikles i videoen en anelse anderledes end programmet herunder.

#include <stdio.h>

#define MAX_X 5
#define MAX_Y 5

int blob_count(int x, int y, int grid[MAX_X][MAX_Y]);
void copy_grid(int from_grid[5][5], int to_grid[MAX_X][MAX_Y]);

int main(void) {
  int x, y;
  int grid_original[MAX_X][MAX_Y] = {
                             {1, 1, 0, 0, 0},
                             {0, 1, 1, 0, 0},
                             {0, 0, 1, 0, 1},
                             {1, 0, 0, 0, 1},
                             {0, 1, 0, 1, 1},
                            },
      grid[MAX_X][MAX_Y];

  do{
    printf("Enter x and y (a negative x or y terminates): ");
    scanf("%d %d", &x, &y);

    copy_grid(grid_original, grid);

    if (x >= 0 && y >= 0)
      printf("blob check af (%d,%d): %d\n", x, y, blob_count(x,y,grid));
  }  while (x >= 0 && y >= 0);
   
  return 0;
}

int blob_count(int x, int y, int grid[MAX_X][MAX_Y]){
  if (x < 0 || y < 0 || x > MAX_X - 1 || y > MAX_Y - 1)
     return 0;
  else if (grid[x][y] == 1){
     int sum, dx, dy;
     
     grid[x][y] = 0;    // Reset cell, in order not to count again
     sum = 1;           // Now counted.

     for(dx = -1; dx <= 1; dx++)
       for(dy = -1; dy <= 1; dy++)
         sum += blob_count(x + dx, y + dy, grid);

     return sum;
  }
  else //  grid[x][y] == 0
     return 0;
}

void copy_grid(int from_grid[MAX_X][MAX_Y], int to_grid[MAX_X][MAX_Y]){
 int x, y;

 for(x = 0; x < MAX_X; x++)
    for(y = 0; y < MAX_Y; y++)
      to_grid[x][y] = from_grid[x][y];
}