Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.99 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int array[1024][1024] = {0};
  5. int results[1024][1024] = {0};
  6. int width, height;
  7. int biggest = 1;
  8.  
  9. enum dir {
  10.     left,
  11.     right,
  12.     down
  13. };
  14.  
  15. void findSnake(int flag, int length, enum dir lastDir, int x, int y) {
  16.     length++;
  17.     int newFlag = flag == 0 ? 1 : 0;
  18.     enum dir newDir;
  19.  
  20.     if (results[x][y] >= length) {
  21.         return;
  22.     }
  23.  
  24.     if (length > biggest)
  25.         biggest = length;
  26.  
  27.     if (lastDir != right) {
  28.         int newX = x - 1;
  29.  
  30.         if (newX >= 0 && array[newX][y] != flag) {
  31.             newDir = left;
  32.             findSnake(newFlag, length, newDir, newX, y);
  33.         }
  34.     }
  35.  
  36.     if (lastDir != left) {
  37.         int newX = x + 1;
  38.  
  39.         if (newX < width && array[newX][y] != flag) {
  40.             newDir = right;
  41.             findSnake(newFlag, length, newDir, newX, y);    
  42.         }
  43.     }
  44.  
  45.     int newY = y + 1;
  46.     if (newY < height && array[x][newY] != flag) {    
  47.         newDir = down;      
  48.         findSnake(newFlag, length, newDir, x, newY);
  49.     }
  50.  
  51.     results[x][y] = length;
  52. }
  53.  
  54. void readArray() {
  55.     for (int i = 0; i < height; i++)
  56.         for (int j = 0; j < width; j++)
  57.             scanf("%d", &array[j][i]);
  58. }
  59.  
  60. void showArray() {
  61.     for (int i = 0; i < height; i++) {
  62.         for (int j = 0; j < width; j++) {
  63.             if (results[j][i] >= 10)    
  64.                 printf("%d ", results[j][i]);
  65.             else
  66.                 printf("%d  ", results[j][i]);
  67.             }
  68.         putchar('\n');
  69.     }
  70. }
  71.  
  72. void checkArray() {
  73.     for (int i = 0; i < height; i++)
  74.         for (int j = 0; j < width; j++) {
  75.             if (results[j][i] == 0)
  76.                 findSnake(array[j][i], 0, down, j, i);
  77.         }
  78. }
  79.  
  80. int main(void) {
  81.     char type[2];
  82.  
  83.     scanf("%s", type);
  84.  
  85.     if (!strcmp("P1", type)) {
  86.         scanf("%d %d", &width, &height);
  87.         readArray();
  88.         checkArray();
  89.         showArray();
  90.         printf("%d\n", biggest);
  91.     }
  92.  
  93.     return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement