📌  相关文章
📜  通过在正确的方向上水平或对角移动来最小化从原点到达目标点的移动

📅  最后修改于: 2022-05-13 01:56:07.313000             🧑  作者: Mango

通过在正确的方向上水平或对角移动来最小化从原点到达目标点的移动

在二维平面上给定源(X1, Y1)作为(0, 0)和目标(X2, Y2) 。在一个步骤中,可以从(X1, Y1)访问(X1+1, Y1+1)(X1+1, Y1)中的任何一个。任务是计算使用给定移动到达目标所需的最小移动。如果无法达到目标,则打印“-1”

例子:

朴素方法:解决这个问题的朴素方法是检查到达目标所需的 (X+1, Y) 和 (X+1, Y+1) 移动的所有组合并打印其中最少的。

有效方法:根据给定的运动条件,可以观察到以下几点:

  • 如果 Y2 > X2,那么我们不能成为目标,因为在每一步中,X 都必须增加 1。
  • 如果 Y2 < X2,那么我们可以沿对角线移动 Y2 次,然后水平移动 (X2-Y2) 次,反之亦然。
  • 如果 Y2 = X2,那么我们可以沿对角线移动 X2 次,或者 Y2 沿对角线移动

使用上述观察可以解决该任务。如果Y2 > X2 ,那么通过给定的移动永远无法达到目标,否则总是需要最少的X2 移动

以下是上述方法的实现-:

C++
// C++ Implementation of the approach
#include 
using namespace std;
 
// Function to find minimum moves
int minimum_Moves(int x, int y)
{
    // If y > x, target can never be reached
    if (x < y) {
        return -1;
    }
 
    // In all other case answer will be X
    else {
        return x;
    }
}
 
// Driver Code
int main()
{
    long long int X2 = 47, Y2 = 11;
    cout << minimum_Moves(X2, Y2) << endl;
}


Java
// Java program for the above approach
import java.io.*;
import java.lang.*;
import java.util.*;
 
class GFG {
 
  // Function to find minimum moves
  static long minimum_Moves(long x, long y)
  {
     
    // If y > x, target can never be reached
    if (x < y) {
      return -1;
    }
 
    // In all other case answer will be X
    else {
      return x;
    }
  }
 
  // Driver Code
  public static void main (String[] args)
  {
 
    long  X2 = 47, Y2 = 11;
    System.out.println(minimum_Moves(X2, Y2));
  }
}
 
// This code is contributed by hrithikgarg03188


Python
# Pyhton Implementation of the approach
 
# Function to find minimum moves
def minimum_Moves(x, y):
     
    # If y > x, target can never be reached
    if (x < y):
        return -1
 
    # In all other case answer will be X
    else:
        return x
 
# Driver Code
X2 = 47
Y2 = 11
print(minimum_Moves(X2, Y2))
 
# This code is contributed by samim2000.


C#
// C# Implementation of the approach
using System;
class GFG {
 
    // Function to find minimum moves
    static int minimum_Moves(int x, int y)
    {
       
        // If y > x, target can never be reached
        if (x < y) {
            return -1;
        }
 
        // In all other case answer will be X
        else {
            return x;
        }
    }
 
    // Driver Code
    public static void Main()
    {
        int X2 = 47, Y2 = 11;
        Console.WriteLine(minimum_Moves(X2, Y2));
    }
}
 
// This code is contributed by ukasp.


Javascript



输出
47

时间复杂度:O(1)
辅助空间:O(1)