Advertisement
Foqrul

Piping problem

Apr 25th, 2019
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.74 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<iostream>
  3. #include<stdio.h>
  4. #define size 55
  5.  
  6. using namespace std;
  7.  
  8. int T, N, M,x,y,length;
  9. int fill1[size][size];
  10. int count1;
  11. int visited[size][size];
  12. int test;
  13.  
  14.  
  15. void readCase()
  16. {
  17.     int i, j;
  18.     cin >> N >> M>>x>>y>>length;
  19.     for (i = 0; i < N; i++)
  20.     {
  21.         for (j = 0; j < M; j++){
  22.             scanf("%d", &fill1[i][j]);
  23.             visited[i][j] = 0;
  24.         }
  25.     }
  26. }
  27. void dfs(int i, int j, int find)
  28. {
  29.     if (find == length){
  30.         //printf("test Case Over\n");
  31.         return;
  32.     }
  33.     if (!visited[i][j]){
  34.         //printf("Initial Count value\n");
  35.         count1++;
  36.         visited[i][j] = 1;
  37.     }
  38.         ///UP
  39.     if (!(visited[i - 1][j]) && (1 == fill1[i][j] || 2 == fill1[i][j] || 4 == fill1[i][j] || 7 == fill1[i][j]) && x - 1 >= 0 && (1 == fill1[i - 1][j] || 2 == fill1[i - 1][j] || 5 == fill1[i - 1][j] || 6 == fill1[i - 1][j])){
  40.         //printf("UP Count value\n");
  41.         count1++;
  42.         visited[i - 1][j] = 1;
  43.         dfs(i - 1, j, find + 1);
  44.         }
  45.         ///DOWN
  46.     if (!(visited[i + 1][j]) && (1 == fill1[i][j] || 2 == fill1[i][j] || 5 == fill1[i][j] || 6 == fill1[i][j]) && x + 1 < N && (1 == fill1[i + 1][j] || 2 == fill1[i + 1][j] || 4 == fill1[i + 1][j] || 7 == fill1[i + 1][j])){
  47.             //printf("DOWN value is %d Count value is %d\n", fill1[i+1][j],fill1[i][j]);
  48.             count1++;
  49.             visited[i + 1][j] = 1;
  50.             dfs(i + 1, j, find + 1);
  51.         }
  52.         ///RIGHT
  53.     if (!(visited[i][j+1]) && (1 == fill1[i][j] || 3 == fill1[i][j] || 4 == fill1[i][j] || 5 == fill1[i][j]) && y + 1 < M && (1 == fill1[i][j + 1] || 3 == fill1[i][j + 1] || 6 == fill1[i][j + 1] || 7 == fill1[i][j + 1])){
  54.             //printf("RIGHT Count value\n");
  55.             count1++;
  56.             visited[i][j + 1] = 1;
  57.             dfs(i, j + 1, find + 1);
  58.         }
  59.     /*if (!visited[i][j+1]){
  60.         printf("visit enter\n");
  61.         if (1 == fill1[i][j] || 3 == fill1[i][j] || 4 == fill1[i][j] || 5 == fill1[i][j]){
  62.             printf("exist found \n");
  63.             if (y + 1 < M){
  64.                 printf("renge exist\n");
  65.                 if (1 == fill1[i][j + 1] || 3 == fill1[i][j + 1] || 6 == fill1[i][j + 1] || 7 == fill1[i][j + 1]){
  66.                     printf("RIGHT Count value\n");
  67.                     count1++;
  68.                     visited[i][j + 1] = 1;
  69.                     dfs(i, j + 1, M + 1);
  70.                 }
  71.             }
  72.         }
  73.     }*/
  74.         ///LEFT
  75.     if (!(visited[i][j-1]) && (1 == fill1[i][j] || 3 == fill1[i][j] || 6 == fill1[i][j] || 7 == fill1[i][j]) && y - 1 >= 0 && (1 == fill1[i][j - 1] || 3 == fill1[i][j - 1] || 4 == fill1[i][j - 1] || 5 == fill1[i][j - 1])){
  76.             //printf("LEFT Count value\n");
  77.             count1++;
  78.             visited[i][j - 1] = 1;
  79.             dfs(i, j - 1, find + 1);
  80.         }
  81. }
  82. void printCase()
  83. {
  84.     int i = 1;
  85.     printf("Case#%d %d\n",i++, count1);
  86. }
  87. int main()
  88. {
  89.     freopen("input.txt", "r", stdin);
  90.     scanf("%d", &T);
  91.     while (T--)
  92.     {
  93.         test = 0;
  94.         count1 = 0;
  95.         readCase();
  96.         //printf("x is %d and y is  %d value is %d\n", x, y, fill1[x][y]);
  97.         dfs(x, y,test);
  98.         printCase();
  99.     }
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement