The problem statement you can read from this: https://practice.geeksforgeeks.org/problems/find-whether-path-exist/0
Following is the C++ code in the last. I am getting different output by just commenting the cout statements when I run it on the following input (3
: walkable path, 1
: source, 2
: destination, 0
: wall):
1
8
3 3 3 3 0 0 3 0
1 3 3 3 3 3 3 2
3 3 0 3 0 3 3 3
3 3 3 0 0 3 3 0
0 3 3 3 3 3 3 3
0 0 0 3 3 0 3 3
0 3 0 3 3 3 3 0
3 3 3 0 3 3 3 3
On the Line no 31st and 35th, there are cout<<"found: 1
";
and cout<<"found: 2
";
printing statements that I was using to debug the code. The statements are printing pure quoted strings (doesn't uses/includes any variable). I came to know that if I don't comment at least one of the line (let say only 31st line), the output is like:
found: 1
1
And if I comment both of the lines I am getting output:
0
I am not able to understand this behavior of the program. The correct ans is 1
as there is a path between 1
and 2
in the matrix. But I don't want to print the lines I have mentioned that was only for debugging. So on commenting them I am getting wrong answer 0
. So can anyone find the fault/reason for such behavior?
Following is the entire code that you can copy and paste into your editor:
// { Driver Code Starts
#include<bits/stdc++.h>
using namespace std;
// } Driver Code Ends
class Solution {
public:
// int n = 0;
// void printTab(int n) {
// while(n-- > 0) cout<<" ";
// }
void DFS(int i, int j, bool *found1, bool *found2,
unordered_set<string> visited, vector<vector<int>>& grid) {
// printTab(++n);
// cout<<">> "<<i<<", "<<j<<"
";
// n--;
visited.insert(i+"_"+j);
if(grid[i][j] == 0) return;
else if(grid[i][j] == 1) {
*found1 = true;
cout<<"found: 1
";
}
else if(grid[i][j] == 2) {
*found2 = true;
// cout<<"found: 2
";
}
// switch(grid[i][j]) {
// case 0: return;
// case 1: *found1 = true;cout<<"found: 1
";break;
// case 2: *found2 = true;break;
// }
if(*found1 && *found2)
return;
int r, c;
// Down
r = i+1;
c = j;
if((r>=0 && r<grid.size() && c>=0 && c<grid[0].size() && !visited.count(r+"_"+c)))
DFS(r, c, found1, found2, visited, grid);
if(*found1 && *found2)
return;
// Left
r = i;
c = j-1;
if((r>=0 && r<grid.size() && c>=0 && c<grid[0].size() && !visited.count(r+"_"+c)))
DFS(r, c, found1, found2, visited, grid);
if(*found1 && *found2)
return;
// Right
r = i;
c = j+1;
if((r>=0 && r<grid.size() && c>=0 && c<grid[0].size() && !visited.count(r+"_"+c)))
DFS(r, c, found1, found2, visited, grid);
if(*found1 && *found2)
return;
// Up
r = i-1;
c = j;
if((r>=0 && r<grid.size() && c>=0 && c<grid[0].size() && !visited.count(r+"_"+c)))
DFS(r, c, found1, found2, visited, grid);
}
bool is_Possible(vector<vector<int>>& grid) {
bool found1, found2;
found1 = found2 = false;
unordered_set<string> visited;
for(int i=0; i<grid.size(); i++) {
for(int j=0; j<grid[0].size(); j++) {
if(!visited.count(i+"_"+j)) {
DFS(i, j, &found1, &found2, visited, grid);
if(found1 || found2)
return (found1 && found2);
}
}
}
return false;
}
};
// { Driver Code Starts.
int main(){
int tc;
cin >> tc;
while(tc--){
int n;
cin >> n;
vector<vector<int>>grid(n, vector<int>(n, -1));
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
cin >> grid[i][j];
}
}
Solution obj;
bool ans = obj.is_Possible(grid);
cout << ((ans) ? "1
" : "0
");
}
return 0;
} // } Driver Code Ends
question from:
https://stackoverflow.com/questions/65651359/why-my-code-is-giving-different-output-by-just-commenting-a-single-printing-cout