t1nman

ships

Dec 15th, 2012
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.11 KB | None | 0 0
  1. #include <stdio.h>
  2. #define MAXLEN 100
  3.  
  4. int count_ships(char array[MAXLEN][MAXLEN], int, int);
  5. void print_field(char array[MAXLEN][MAXLEN], int, int);
  6.  
  7. int main()
  8. {
  9.     int height, width;
  10.  
  11.     scanf("%d %d", &height, &width);
  12.  
  13.     char field[MAXLEN][MAXLEN];
  14.     int i, j, c;
  15.    
  16.     /* scanning field */
  17.     for (i = 0; i < height+2; i++) {
  18.         for (j = 0; j < width+2; j++) {
  19.             field[i][j] = (i == 0 || i == height+1 ||
  20.                            j == 0 || j == width+1)
  21.                         ? '*' /* field's border : needed for debugging */
  22.                         : ((c = getchar()) != '\n') ? c : getchar() ;
  23.         }
  24.     }
  25.    
  26.     print_field(field, height, width); /* field before removing ships */
  27.     printf("%d\n", count_ships(field, height, width));
  28.     print_field(field, height, width); /* field after removing ships */
  29.  
  30.     return 0;
  31. }
  32.  
  33. #define VERTICAL   1
  34. #define HORIZONTAL 0
  35.  
  36. /* Notice: ships must be placed under the rules of The Sea Fight game */
  37. int count_ships(char field[MAXLEN][MAXLEN], int height, int width)
  38. {
  39.     int ships_number, i, j, k, type;
  40.  
  41.     ships_number = 0;
  42.     type = HORIZONTAL;
  43.  
  44.     for (i = 1; i < height+1; i++)
  45.         for (j = 1; j < width+1; j++) {
  46.             if (field[i][j] == '#') {
  47.                 if (field[i+1][j] == '#')
  48.                     type = VERTICAL;
  49.                 else
  50.                     type = HORIZONTAL;
  51.  
  52.                 if (type == VERTICAL) {
  53.                     k = i;
  54.                     while (field[k][j] == '#')
  55.                         field[k++][j] = ' ';
  56.                 } else {
  57.                     k = j;
  58.                     while (field[i][k] == '#')
  59.                         field[i][k++] = ' ';
  60.                 }
  61.                 ships_number++;
  62.             }
  63.         }
  64.     return ships_number;
  65. }
  66.  
  67. /* needed for debugging : not required for solution */
  68. void print_field(char field[MAXLEN][MAXLEN], int height, int width)
  69. {
  70.     int i, j;
  71.  
  72.     for (i = 0; i < height+2; i++) {
  73.         for (j = 0; j < width+2; j++)
  74.             printf("%c", field[i][j]);
  75.         putchar('\n');
  76.     }
  77. }
Advertisement
Add Comment
Please, Sign In to add comment