สมมติว่าเรามีเมทริกซ์ 2 มิติ โดยองค์ประกอบต่างๆ แสดงถึงความสูงของภูมิประเทศ ลองนึกภาพสถานการณ์ที่ฝนจะตกและพื้นที่ทั้งหมดในหุบเขาจะเต็มไป
เราต้องหาปริมาณฝนที่จะตกลงมาระหว่างหุบเขา
ดังนั้นหากอินพุตเป็นแบบ
6 | 6 | 6 | 8 |
6 | 4 | 5 | 8 |
6 | 6 | 6 | 6 |
จากนั้นผลลัพธ์จะเป็น 3 เนื่องจากเราสามารถเก็บน้ำได้ 3 หน่วยระหว่าง 4 ถึง 5 สี่เหลี่ยม
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดโครงสร้างข้อมูลที่มีพิกัด x และ y และความสูง h
-
กำหนดลำดับความสำคัญของคิว pq จะจัดเก็บรายการข้อมูลที่จัดเรียงตามค่าความสูง
-
n :=ขนาดของ h
-
ถ้า n ไม่ใช่ศูนย์ ดังนั้น −
-
คืนค่า 0
-
-
m :=ขนาดของ h[0]
-
กำหนดคู่หนึ่งชุดที่เรียกว่าเยี่ยมชมแล้ว
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
แทรกข้อมูลใหม่ (h[i, 0], i, 0) ลงใน pq
-
แทรก {i, 0} เข้าไปแล้ว
-
แทรกข้อมูลใหม่ (h[i, m - 1], i, m - 1) ลงใน pq
-
แทรก {i, m - 1} เข้าไปแล้ว
-
-
สำหรับการเริ่มต้น i :=1 เมื่อฉัน
-
แทรกข้อมูลใหม่ (h[0, i], 0, i) ลงใน pq
-
แทรก {0, i} เข้าไปแล้ว
-
แทรกข้อมูลใหม่ (h[n - 1, i], n - 1, i) ลงใน pq
-
แทรก {n - 1, i} เข้าไปแล้ว
-
-
ยกเลิก :=0
-
maxVal :=0
-
ในขณะที่ pq ไม่ว่างเปล่า ให้ทำ -
-
temp =องค์ประกอบด้านบนของ pq
-
ลบองค์ประกอบด้านบนออกจาก pq
-
maxVal :=สูงสุดของความสูงของอุณหภูมิและ maxVal
-
x :=x อุณหภูมิ
-
y :=y ของอุณหภูมิ
-
สำหรับการเริ่มต้น i :=0 เมื่อ i <4 อัปเดต (เพิ่ม i ขึ้น 1) ให้ทำ -
-
nx :=x + dir[i, 0]
-
ny :=y + dir[i, 1]
-
ถ้า nx>=0 และ ny>=0 และ nx
-
val :=h[nx, ny]
-
ถ้าวาล
-
ret :=ret + maxVal - วาล
-
val :=maxVal
-
-
แทรกข้อมูลใหม่ (val, nx, ny) ลงใน pq
-
แทรก {nx, ny} เข้าไปแล้ว
-
-
-
-
รีเทิร์น
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#includeใช้เนมสเปซ std;จัดโครงสร้างข้อมูล { int x, y; int ชั่วโมง; ข้อมูล (int a, int b, int c) { h =a; x =ข; y =ค; }};struct Comparator { ตัวดำเนินการบูล () (ข้อมูล a, ข้อมูล b) { return !(ah >&h) {priority_queue, Comparator> pq; int n =h.size(); ถ้า (!n) คืนค่า 0; int m =h[0].size(); set > เยี่ยมชม; สำหรับ (int i =0; i =0 &&ny>=0 &&nx >&เมทริกซ์) { return (new Solution())->solve(matrix);}int main(){ vector > v ={ {6, 6, 6, 8}, {6, 4, 5, 8}, {6, 6, 6, 6} }; ศาล <<แก้ (v);}
อินพุต
<ก่อน>{ {6, 6, 6, 8}, {6, 4, 5, 8}, {6, 6, 6, 6}};ผลลัพธ์
3