📜  三角形最短路径的最小长度

📅  最后修改于: 2021-10-23 08:31:05             🧑  作者: Mango

给定平面上的N个点, ( X 1 , Y 1 ), ( X 2 , Y 2 ), ( X 3 , Y 3 ), ……, ( X N , Y N )。任务是计算三角形短边的最小长度。以及放置等腰三角形的路径或点,该三角形的任意两条边位于坐标轴(X 轴和 Y 轴)上以覆盖所有点。
注意:如果点位于三角形内或三角形的边上,则该点被覆盖。
例子:

在第一个示例中,最短路径的最小长度等于点的最大和,即 1+3 或 2+2。所以覆盖所有点的路径是坐标轴上的 (1, 4) 和 (4, 1)。
下面是解决这个问题的分步算法:

  1. 在平面上初始化“N”个点。
  2. 遍历每个点并找到每个点的总和并将其存储在变量“answer”中。
  3. 用前一个总和替换点的下一个最大总和。
  4. 然后,您将获得坐标轴 ( 1, answer ) 和 ( answer, 1 ) 上的路径,该坐标轴将覆盖等腰三角形的所有点。

下面是上述算法的实现:

C++
// C++ program to illustrate
// the above problem
#include 
using namespace std;
#define ll long long
 
// function to get the minimum length of
// the shorter side of the triangle
void shortestLength(int n, int x[], int y[])
{
        int answer = 0;
 
    // traversing through each points on the plane
    int i = 0;
    while (n--) {
        // if sum of a points is greater than the
        // previous one, the maximum gets replaced
        if (x[i] + y[i] > answer)
            answer = x[i] + y[i];
 
        i++;
    }
 
    // print the length
    cout << "Length -> " << answer << endl;
    cout << "Path -> "
         << "( 1, " << answer << " )"
         << "and ( " << answer << ", 1 )";
}
 
// Driver code
int main()
{
    // initialize the number of points
    int n = 4;
 
    // points on the plane
    int x[n] = { 1, 4, 2, 1 };
    int y[n] = { 4, 1, 1, 2 };
 
    shortestLength(n, x, y);
 
    return 0;
}


Java
// Java program to illustrate
// the above problem
class GFG
{
 
// function to get the minimum length of
// the shorter side of the triangle
static void shortestLength(int n, int x[],
                           int y[])
{
    int answer = 0;
 
    // traversing through each
    // points on the plane
    int i = 0;
    while (n != 0 && i < x.length)
    {
        // if sum of a points is greater
        // than the previous one, the
        // maximum gets replaced
        if (x[i] + y[i] > answer)
            answer = x[i] + y[i];
 
        i++;
    }
 
    // print the length
    System.out.println("Length -> " + answer );
    System.out.println("Path -> " +
                       "( 1, " + answer + " )" +
                       "and ( " + answer + ", 1 )");
}
 
// Driver code
public static void main(String[] args)
{
    // initialize the number of points
    int n = 4;
 
    // points on the plane
    int x[] = new int[] { 1, 4, 2, 1 };
    int y[] = new int[] { 4, 1, 1, 2 };
 
    shortestLength(n, x, y);
}
}
 
// This code is contributed
// by Prerna Saini


Python 3
# Python 3 program to illustrate
# the above problem
 
# function to get the minimum length of
# the shorter side of the triangle
def shortestLength(n, x, y):
    answer = 0
 
    # traversing through each
    # points on the plane
    i = 0
    while n > 0:
         
        # if sum of a points is greater
        # than the previous one, the
        # maximum gets replaced
        if (x[i] + y[i] > answer):
            answer = x[i] + y[i]
 
        i += 1
        n -= 1
 
    # print the length
    print("Length -> "+ str(answer))
    print( "Path -> "+
        "( 1, " +str(answer)+ " )"+
        "and ( "+str( answer) +", 1 )")
 
# Driver code
if __name__ == "__main__":
     
    # initialize the number of points
    n = 4
 
    # points on the plane
    x = [ 1, 4, 2, 1 ]
    y = [ 4, 1, 1, 2 ]
    shortestLength(n, x, y)
 
# This code is contributed
# by ChitraNayal


C#
// C# program to illustrate
// the above problem
using System;
 
class GFG
{
 
// function to get the minimum
// length of the shorter side
// of the triangle
static void shortestLength(int n, int[] x,
                           int[] y)
{
    int answer = 0;
 
    // traversing through each
    // points on the plane
    int i = 0;
    while (n != 0 && i < x.Length)
    {
        // if sum of a points is greater
        // than the previous one, the
        // maximum gets replaced
        if (x[i] + y[i] > answer)
            answer = x[i] + y[i];
 
        i++;
    }
 
    // print the length
    Console.WriteLine("Length -> " + answer);
    Console.WriteLine("Path -> " +
                      "( 1, " + answer + " )" +
                      "and ( " + answer + ", 1 )");
}
 
// Driver code
static public void Main ()
{
     
    // initialize the
    // number of points
    int n = 4;
 
    // points on the plane
    int[] x = new int[] { 1, 4, 2, 1 };
    int[] y = new int[] { 4, 1, 1, 2 };
 
    shortestLength(n, x, y);
}
}
 
// This code is contributed by Mahadev


PHP
 $answer)
            $answer = $x[$i] + $y[$i];
 
        $i++;
    }
 
    // print the length
    echo "Length -> ".$answer."\n";
    echo "Path -> ". "( 1, " .$answer ." )".
         "and ( " .$answer . ", 1 )";
}
 
// Driver code
 
// initialize the number of points
$n = 4;
 
// points on the plane
$x = array(1, 4, 2, 1 );
$y = array(4, 1, 1, 2 );
 
shortestLength($n, $x, $y);
 
// This code is contributed
// by ChitraNayal
?>


Javascript


输出:
Length -> 5
Path -> ( 1, 5 )and ( 5, 1 )

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程