Advertisement
Helal_brur

Untitled

Sep 21st, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.08 KB | None | 0 0
  1. class Solution {
  2.  
  3. public:
  4. map<pair<int,int>,int> mp;
  5. int minKnightMoves(int x, int y) {
  6. for(int i=-310;i<310;i++){
  7. for(int j=-310;j<310;j++){
  8. mp[make_pair(i,j)]++;
  9. }
  10. }
  11. return dp(0 ,0,x,y,0);
  12.  
  13.  
  14.  
  15. }
  16. int dp(int i,int j,int x,int y,int n){
  17. if(abs(i)>300 || abs(j)>300){
  18. return 100000;
  19. }
  20. if(i==0 && j==x){
  21. return n;
  22. }
  23. int a=100000;
  24.  
  25. if((abs(i+2)<=300 && abs(j+1)<=300)){
  26. if(mp[make_pair(i+2,j+1)]==1 ){
  27.  
  28. int p=dp(i+2,j+1,x,y,n+1);
  29. mp[make_pair(i+2,j+1)]=p;
  30. a=min(a,p);
  31.  
  32.  
  33. }else{
  34. a=min(a,mp[make_pair(i+2,j+1)]);
  35. }
  36. }
  37.  
  38.  
  39.  
  40.  
  41. if(abs(i+2)<=300 && abs(j-1)<=300){
  42. if( mp[make_pair(i+2,j-1)]==1){
  43. int p=dp(i+2,j-1,x,y,n+1);
  44. mp[make_pair(i+2,j-1)]=p;
  45. a=min(a, p);
  46. }else{
  47. a=min(a,mp[make_pair(i+2,j-1)]);
  48. }
  49. }
  50.  
  51. if(abs(i-2)<=300 && abs(j+1)<=300){
  52. if( mp[make_pair(i-2,j+1)]==1){
  53. int p=dp(i-2,j+1,x,y,n+1);
  54. mp[make_pair(i-2,j+1)]=p;
  55. a=min(a, p);
  56. }else{
  57. a=min(a, mp[make_pair(i-2,j+1)]);
  58. }
  59. }
  60.  
  61.  
  62.  
  63. if(abs(i-2)<=300 && abs(j-1)<=300){
  64. if( mp[make_pair(i-2,j-1)]==1){
  65. int p=dp(i-2,j-1,x,y,n+1);
  66. mp[make_pair(i-2,j-1)]=p;
  67. a=min(a, p);
  68. }else{
  69. a=min(a,mp[make_pair(i-2,j-1)]);
  70. }
  71. }
  72.  
  73.  
  74. if(abs(i+1)<=300 && abs(j+2)<=300){
  75. if( mp[make_pair(i+1,j+2)]==1){
  76. int p=dp(i+1,j+2,x,y,n+1);
  77. mp[make_pair(i+1,j+2)]=p;
  78. a=min(a, p);
  79. }else{
  80. a=min(a, mp[make_pair(i+1,j+2)]);
  81. }
  82. }
  83.  
  84.  
  85. if(abs(i+1)<=300 && abs(j-2)<=300){
  86. if( mp[make_pair(i+1,j-2)]==1){
  87. int p=dp(i+1,j-2,x,y,n+1);
  88. mp[make_pair(i+1,j-2)]=p;
  89. a=min(a, p);
  90. }else{
  91. a=min(a, dp(i+1,j-2,x,y,n+1));
  92. }
  93. }
  94.  
  95.  
  96. if(abs(i-1)<=300 && abs(j-2)<=300){
  97. if( mp[make_pair(i-1,j-2)]==1){
  98. int p=dp(i-1,j-2,x,y,n+1);
  99. mp[make_pair(i-1,j-2)]=p;
  100. a=min(a, p);
  101. }else{
  102. a=min(a,mp[make_pair(i-1,j-2)]);
  103. }
  104. }
  105.  
  106.  
  107. if(abs(i-1)<=300 && abs(j+2)){
  108. if( mp[make_pair(i-1,j+2)]==1){
  109. int p= dp(i-1,j+2,x,y,n+1);
  110. mp[make_pair(i-1,j+2)]=p;
  111. a=min(a,p);
  112. }else{
  113. a=min(a, mp[make_pair(i-1,j+2)]);
  114. }
  115. }
  116.  
  117.  
  118.  
  119.  
  120. return a;
  121. }
  122. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement