เราได้รับอาร์เรย์ 2 มิติขององค์ประกอบจำนวนเต็มที่สร้างเมทริกซ์ ภารกิจคือการคำนวณจำนวนผลรวมขั้นต่ำโดยการดึงเมทริกซ์ย่อยจากเมทริกซ์ที่เกิดขึ้น
ให้เราดูสถานการณ์อินพุตเอาต์พุตต่างๆ สำหรับสิ่งนี้ -
ใน - int matrix[ขนาด][ขนาด] ={{2, 3, -1, 5}, {-2, 9, -1, 6}, { 5, 6, 9, -9}, { -6, 1, 1, 1} } }
ออก − เมทริกซ์ผลรวมขั้นต่ำในอาร์เรย์ 2 มิติที่กำหนดคือ:-9
คำอธิบาย − เราได้รับอาร์เรย์ 2 มิติขนาด 4x4 เช่น 4 แถวและ 4 คอลัมน์ ตอนนี้ เราจะหาเมทริกซ์ย่อยจากเมทริกซ์ที่กำหนด โดยที่ค่าย่อยขั้นต่ำคือ -9
ใน - int matrix[row][column] ={{4, 1, 3}, {-1, -1, -1}, { 6, 2, 3}}
ออก − เมทริกซ์ผลรวมขั้นต่ำในอาร์เรย์ 2 มิติที่กำหนดคือ:-3
คำอธิบาย − เราได้รับอาร์เรย์ 2 มิติขนาด 3x3 เช่น 3 แถวและ 3 คอลัมน์ ตอนนี้ เราจะหาเมทริกซ์ย่อยจากเมทริกซ์ที่กำหนด โดยที่การย่อยขั้นต่ำคือ -3 ซึ่งทำได้ด้วยแถวที่สองในเมทริกซ์ที่กำหนด และเมทริกซ์ย่อยจะมีขนาด 1x3 เช่น 1 แถวและ 3 คอลัมน์
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้ −
-
ป้อนอาร์เรย์ 2 มิติจำนวนเต็มแล้วส่งข้อมูลไปยังฟังก์ชัน Minimum_Matrix(matrix) เพื่อการประมวลผลต่อไป
-
ภายในฟังก์ชัน Minimum_Matrix(matrix)
-
ประกาศตัวแปรชั่วคราวเป็นผลลัพธ์ int =INT_MAX, int arr[row], int total, int first และ int end
-
เริ่มวนรอบ FOR จาก int ถึง temp จนถึง temp น้อยกว่าคอลัมน์ ภายในลูปกำหนดองค์ประกอบอาร์เรย์เป็น 0 เริ่มลูปอื่น FOR จาก int ถึง temp_2 ถึง temp_2 น้อยกว่าคอลัมน์ ภายในลูป เริ่มการวนซ้ำอีกครั้งจาก int i ถึง 0 จนถึง i น้อยกว่าแถวและตั้งค่า arr[i] เป็น ar[i] + matrix[i][temo_2]
-
ตั้งค่าผลรวมเป็นการเรียกใช้ฟังก์ชัน Algo_Kad(arr, &first, &end, row)
-
ตรวจสอบว่า IF ผลรวมน้อยกว่าผลลัพธ์ แล้วตั้งค่าผลลัพธ์เป็นผลรวม
-
พิมพ์ผลลัพธ์เป็นผลลัพธ์สุดท้าย
-
-
ภายในฟังก์ชัน int Algo_Kad(int* arr, int* first, int* end, int max_size)
-
ประกาศตัวแปรชั่วคราวเป็นผลรวมของ int เป็น 0, int ให้ผลลัพธ์เป็น INT_MAX, int temp เป็น 0 และ *end =-1
-
เริ่มวนซ้ำ FOR จาก i ถึง 0 จนถึง i น้อยกว่า max_size ภายในลูป ตั้งค่า Total เป็น Total + arr[i].
-
ตรวจสอบว่าผลรวมมากกว่า 0 แล้วตั้งค่าผลรวมเป็น 0 และอุณหภูมิเป็น i + 1
-
มิฉะนั้น ให้ตรวจสอบผลรวมที่น้อยกว่าผลลัพธ์ จากนั้นตั้งค่าผลลัพธ์เป็นผลรวม *ก่อนไปที่ชั่วคราว และ *สิ้นสุดที่ i
-
ตอนนี้ตรวจสอบ IF *end ไม่เท่ากับ -1 แล้วส่งคืนผลลัพธ์
-
ตั้งค่าผลลัพธ์เป็น arr[0], *first to 0 and *end to 0
-
เริ่มวนซ้ำ FOR จาก i ถึง 1 จนถึง i น้อยกว่า max_size ภายในลูป ให้ตรวจสอบว่า arr[i] น้อยกว่าผลลัพธ์ จากนั้นตั้งค่าผลลัพธ์เป็น arr[i], *first as i และ *end as i
-
ส่งคืนผลลัพธ์
-
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; #define row 4 #define column 4 int Algo_Kad(int* arr, int* first, int* end, int max_size) { int total = 0; int result = INT_MAX; int temp = 0; *end = -1; for(int i = 0; i < max_size; ++i) { total = total + arr[i]; if(total > 0) { total = 0; temp = i + 1; } else if(total < result) { result = total; *first = temp; *end = i; } } if(*end != -1) { return result; } result = arr[0]; *first = 0; *end = 0; for(int i = 1; i < max_size; i++) { if(arr[i] < result) { result = arr[i]; *first = i; *end = i; } } return result; } void Minimum_Matrix(int matrix[][column]) { int result = INT_MAX; int arr[row]; int total; int first; int end; for(int temp = 0; temp < column; ++temp) { memset(arr, 0, sizeof(arr)); for(int temp_2 = temp; temp_2 < column; ++temp_2) { for(int i = 0; i < row; ++i) { arr[i] = arr[i] + matrix[i][temp_2]; } total = Algo_Kad(arr, &first, &end, row); if(total < result) { result = total; } } } cout<<"Minimum sum submatrix in a given 2D array is: "<<result; } int main() { int matrix[row][column] = {{2, 3, -1, 5}, {-2, 9, -1, 6}, { 5, 6, 9, -9}, { -6, 1, 1, 1} }; Minimum_Matrix(matrix); return 0; }
ผลลัพธ์
หากเรารันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้
Minimum sum submatrix in a given 2D array is: -9