fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. vector<vector<int>>visitedk1;
  5. vector<vector<int>>visitedk2;
  6.  
  7. int i;int j;
  8. int solve1(int c1,int x,int y,int t1,int t2,vector<vector<int>>& visited){
  9. if(x==t1 && y==t2 ) {
  10. return c1;
  11. }
  12. int ans = INT_MAX;
  13. if((x>=i)||(y>=j)||(x<0)||(y<0)){
  14. return ans;
  15. }
  16. if(c1>=visited[x][y]){
  17. return ans;
  18. }
  19. visited[x][y]=c1;
  20.  
  21. ans = min(ans,solve1(c1+1,x-1,y-2,t1,t2,visited));
  22. ans = min(ans,solve1(c1+1,x-1,y+2,t1,t2,visited));
  23. ans = min(ans,solve1(c1+1,x+1,y-2,t1,t2,visited));
  24. ans = min(ans,solve1(c1+1,x+1,y+2,t1,t2,visited));
  25. ans = min(ans,solve1(c1+1,x-2,y-1,t1,t2,visited));
  26. ans = min(ans,solve1(c1+1,x+2,y-1,t1,t2,visited));
  27. ans = min(ans,solve1(c1+1,x-2,y+1,t1,t2,visited));
  28. ans = min(ans,solve1(c1+1,x+2,y+1,t1,t2,visited));
  29.  
  30. return ans;
  31.  
  32. }
  33.  
  34.  
  35.  
  36.  
  37. void solve(int a,int b,int x,int y,int t1,int t2){
  38. int k1 = solve1(0,a,b,t1,t2,visitedk1);
  39. int k2 = solve1(0,x,y,t1,t2,visitedk2);
  40. if(k1 == INT_MAX && k2 == INT_MAX){
  41. cout<<"Not Possible";
  42. return ;
  43. }
  44. if(k1<k2){
  45. cout<<"Knight 1";
  46. return ;
  47. }
  48. else if(k1>k2){
  49. cout<<"Knight 2";
  50. }
  51. else{
  52. cout<<"Both";
  53. }
  54.  
  55.  
  56.  
  57.  
  58.  
  59. }
  60.  
  61. int main() {
  62. int x1,y1,x2,y2,t1,t2,n,m;
  63. cin>>x1>>y1;
  64. cin>>x2>>y2;
  65. cin>>t1>>t2;
  66. cin>>n>>m;
  67.  
  68. i = n;j = m;
  69. if(x1==t1 && y1==t2 ) {
  70. cout<<"Knight 1";
  71. return 0;
  72. }
  73.  
  74.  
  75. else if(x2==t1 && y2 == t2){
  76. cout<<"Knight 2";
  77. return 0;
  78. }
  79. visitedk1.resize(n,vector<int>(m,INT_MAX));
  80. visitedk2.resize(n,vector<int>(m,INT_MAX));
  81.  
  82. solve(x1,y1,x2,y2,t1,t2);
  83.  
  84.  
  85.  
  86. }
  87.  
Success #stdin #stdout 0s 5308KB
stdin
1 1
3 3
1 1
stdout
Knight 1