Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เส้นทาง C++ ที่มีค่าเฉลี่ยสูงสุด


ให้เมทริกซ์ 2 มิติในปัญหานี้ และเราจำเป็นต้องค้นหาเส้นทางที่มีค่าเฉลี่ยสูงสุด สำหรับเส้นทาง ต้นทางของเราคือเซลล์ซ้ายบนสุด และปลายทางคือเซลล์ขวาล่างสุด เช่น −

Input : Matrix = [1, 2, 3
4, 5, 6
7, 8, 9]
Output : 5.8
Path with maximum average is, 1 -> 4 -> 7 -> 8 -> 9
Sum of the path is 29 and average is 29/5 = 5.8

ในปัญหานี้ เราได้รับอนุญาตให้เคลื่อนที่ไปทางขวาหรือลงเท่านั้น สิ่งนี้ทำให้ปัญหาของเราง่ายขึ้น เนื่องจากเรารู้ว่าเราต้องการ N-1 เพื่อย้ายไปทางขวา และ N-1 เลื่อนลงเพื่อไปยังจุดหมายปลายทางของเรา เป็นเส้นทางที่ถูกต้องที่สั้นที่สุด เพื่อที่เราจะพัฒนาแนวทางของเราโดยการสังเกตเหล่านี้

แนวทางในการหาแนวทางแก้ไข

ในแนวทางนี้ เราจำเป็นต้องใช้โปรแกรมไดนามิกเพื่อคำนวณผลรวมของพาธสูงสุดเมื่อตัวส่วนได้รับการแก้ไข

ตัวอย่าง

รหัส C++ สำหรับแนวทางข้างต้น

#include <bits/stdc++.h>
using namespace std;
int maximumPathSum(int cost[][3], int n){ // our function that return maximum average
    int dp[n+1][n+1];
    dp[0][0] = cost[0][0];
    for (int i = 1; i < n; i++) // initializing the first column of our dp matrix
        dp[i][0] = dp[i-1][0] + cost[i][0];
    for (int j = 1; j < n; j++) // initializing the first row of our dp matrix
        dp[0][j] = dp[0][j-1] + cost[0][j];
    for (int i = 1; i < n; i++) // constructing the rest of our matrix
        for (int j = 1; j <= n; j++)
            dp[i][j] = max(dp[i-1][j],dp[i][j-1]) + cost[i][j];
    return dp[n-1][n-1]; // now we divide the maximum path sum with the number of moves
}
int main(){
   int cost[3][3] = { {1, 2, 3}, {4, 5, 6},{7, 8, 9}};// given grid
   int n = 3; // order of our matrix
   printf("%.1f", float(maximumPathSum(cost, n)) / float((2*n-1)));
   return 0;
}

ผลลัพธ์

5.8

คำอธิบายของโค้ดด้านบน

ในแนวทางข้างต้น เราสังเกตว่าการเคลื่อนไหวสูงสุดที่เราทำมีค่าเท่ากับ (2*n) - 1 โดยที่ n คือลำดับของเมทริกซ์ต้นทุนของเราในขณะนี้ เนื่องจากตอนนี้เรามีตัวส่วนตายตัวแล้ว ดังนั้น เราจำเป็นต้องคำนวณผลรวมของเส้นทางสูงสุด นี่เป็นหนึ่งในปัญหา dp แบบคลาสสิก และเราแก้ไขโดยใช้สิ่งนั้น จากนั้นเราพิมพ์ผลลัพธ์ของเรา

บทสรุป

ในบทช่วยสอนนี้ เราจะแก้ปัญหาเพื่อค้นหาเส้นทางที่มีค่าเฉลี่ยสูงสุด นอกจากนี้เรายังได้เรียนรู้โปรแกรม C ++ สำหรับปัญหานี้และแนวทางที่สมบูรณ์ ( Normal) ซึ่งเราแก้ไขปัญหานี้ เราสามารถเขียนโปรแกรมเดียวกันในภาษาอื่นๆ เช่น C, java, python และภาษาอื่นๆ เราหวังว่าคุณจะพบว่าบทช่วยสอนนี้มีประโยชน์