Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include<iostream>
- #include<stdio.h>
- #define size 55
- using namespace std;
- int T, N, M,x,y,length;
- int fill1[size][size];
- int count1;
- int visited[size][size];
- int test;
- void readCase()
- {
- int i, j;
- cin >> N >> M>>x>>y>>length;
- for (i = 0; i < N; i++)
- {
- for (j = 0; j < M; j++){
- scanf("%d", &fill1[i][j]);
- visited[i][j] = 0;
- }
- }
- }
- void dfs(int i, int j, int find)
- {
- if (find == length){
- //printf("test Case Over\n");
- return;
- }
- if (!visited[i][j]){
- //printf("Initial Count value\n");
- count1++;
- visited[i][j] = 1;
- }
- ///UP
- 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])){
- //printf("UP Count value\n");
- count1++;
- visited[i - 1][j] = 1;
- dfs(i - 1, j, find + 1);
- }
- ///DOWN
- 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])){
- //printf("DOWN value is %d Count value is %d\n", fill1[i+1][j],fill1[i][j]);
- count1++;
- visited[i + 1][j] = 1;
- dfs(i + 1, j, find + 1);
- }
- ///RIGHT
- 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])){
- //printf("RIGHT Count value\n");
- count1++;
- visited[i][j + 1] = 1;
- dfs(i, j + 1, find + 1);
- }
- /*if (!visited[i][j+1]){
- printf("visit enter\n");
- if (1 == fill1[i][j] || 3 == fill1[i][j] || 4 == fill1[i][j] || 5 == fill1[i][j]){
- printf("exist found \n");
- if (y + 1 < M){
- printf("renge exist\n");
- if (1 == fill1[i][j + 1] || 3 == fill1[i][j + 1] || 6 == fill1[i][j + 1] || 7 == fill1[i][j + 1]){
- printf("RIGHT Count value\n");
- count1++;
- visited[i][j + 1] = 1;
- dfs(i, j + 1, M + 1);
- }
- }
- }
- }*/
- ///LEFT
- 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])){
- //printf("LEFT Count value\n");
- count1++;
- visited[i][j - 1] = 1;
- dfs(i, j - 1, find + 1);
- }
- }
- void printCase()
- {
- int i = 1;
- printf("Case#%d %d\n",i++, count1);
- }
- int main()
- {
- freopen("input.txt", "r", stdin);
- scanf("%d", &T);
- while (T--)
- {
- test = 0;
- count1 = 0;
- readCase();
- //printf("x is %d and y is %d value is %d\n", x, y, fill1[x][y]);
- dfs(x, y,test);
- printCase();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement