online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code    Language
#include <bits/stdc++.h> using namespace std; bool isValid(int kx,int ky,int tx,int ty,int **dp,bool **visited,int n) { if(kx >= 0 && kx < n && ky >=0 && ky < n && visited[kx][ky] == false) return true; return false; } int findMinSteps(int kx,int ky,int tx,int ty,int **dp,bool **visited,int n) { // base case if(tx == kx && ty == ky) { dp[tx][ty] = 0; return 0; } if(dp[kx][ky] != -2){ // we've already explored this position return dp[kx][ky]; } visited[kx][ky] = true; // avoid infinite loop // from current position we can move in 8 possible directions bool a = isValid(kx-2,ky-1,tx,ty,dp,visited,n); bool b = isValid(kx-2,ky+1,tx,ty,dp,visited,n); bool c = isValid(kx-1,ky+2,tx,ty,dp,visited,n); bool d = isValid(kx+1,ky+2,tx,ty,dp,visited,n); bool e = isValid(kx+2,ky+1,tx,ty,dp,visited,n); bool f = isValid(kx+2,ky-1,tx,ty,dp,visited,n); bool g = isValid(kx+1,ky-2,tx,ty,dp,visited,n); bool h = isValid(kx-1,ky-2,tx,ty,dp,visited,n); if(a == false && b == false && c == false && d == false && e == false && f == false && g == false && h == false){ visited[kx][ky] = false; dp[kx][ky] = -1; return -1; } int res = INT_MAX; if(a) { int op1 = findMinSteps(kx-2,ky-1,tx,ty,dp,visited,n); if(op1 < res && op1 != -1) res = op1; } if(b) { int op2 = findMinSteps(kx-2,ky+1,tx,ty,dp,visited,n); if(op2 < res && op2 != -1) res = op2; } if(c) { int op3 = findMinSteps(kx-1,ky+2,tx,ty,dp,visited,n); if(op3 < res && op3 != -1) res = op3; } if(d) { int op4 = findMinSteps(kx+1,ky+2,tx,ty,dp,visited,n); if(op4 < res && op4 != -1) res = op4; } if(e) { int op5 = findMinSteps(kx+2,ky+1,tx,ty,dp,visited,n); if(op5 < res && op5 != -1) res = op5; } if(f) { int op6 = findMinSteps(kx+2,ky-1,tx,ty,dp,visited,n); if(op6 < res && op6 != -1) res = op6; } if(g) { int op7 = findMinSteps(kx+1,ky-2,tx,ty,dp,visited,n); if(op7 < res && op7 != -1) res = op7; } if(h) { int op8 = findMinSteps(kx-1,ky-2,tx,ty,dp,visited,n); if(op8 < res && op8 != -1) res = op8; } visited[kx][ky] = false; if(res != INT_MAX) { dp[kx][ky] = 1 + res; } else { dp[kx][ky] = -1; } return dp[kx][ky]; } int main() { int t; cin>>t; while(t--) { int n; cin>>n; int kx,ky,tx,ty; cin>>kx>>ky>>tx>>ty; kx = kx-1; ky = ky-1; tx = tx-1; ty = ty-1; int **dp = new int*[n]; bool **visited = new bool*[n]; for(int i=0;i<n;i++) { dp[i] = new int[n]; visited[i] = new bool[n]; for(int j=0;j<n;j++){ dp[i][j] = -2; visited[i][j] = false; } } int minSteps = findMinSteps(kx,ky,tx,ty,dp,visited,n); /** ------------ Debuging Purpose --------------- for(int i=0;i<n;i++) { for(int j=0;j<n;j++){ if(dp[i][j]!=INT_MAX) cout<<dp[i][j]<<" "; else cout<<"#"<<" "; } cout<<endl; } **/ cout<<minSteps<<endl; for(int i=0;i<n;i++) { delete []visited[i]; delete []dp[i]; } } return 0; }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue