สมมติว่าเรามีเมทริกซ์ขนาด n x m สองตัวชื่อ mat1 และ mat2 เราต้องตรวจสอบว่าเมทริกซ์สองตัวนี้เพิ่มขึ้นอย่างเคร่งครัดหรือไม่โดยการสลับเพียงสององค์ประกอบในเมทริกซ์ที่ต่างกันก็ต่อเมื่ออยู่ที่ตำแหน่ง (i, j) ในเมทริกซ์ทั้งสอง
ดังนั้นหากอินพุตเป็นแบบ
7 | 1 5 |
1 6 | 1 0 |
1 4 | 9 |
8 | 1 7 |
จากนั้นผลลัพธ์จะเป็น True เนื่องจากเราสามารถสลับคู่ (7, 14) และ (10, 17) เพื่อให้เพิ่มขึ้นอย่างเคร่งครัด
1 4 | 1 5 |
1 6 | 1 7 |
7 | 9 |
8 | 1 0 |
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- row :=จำนวนแถวของ mat1
- col :=จำนวนคอลัมน์ของ mat1
- สำหรับฉันในช่วง 0 ถึงแถว - 1 ทำ
- สำหรับ j ในช่วง 0 ถึง col - 1 ทำ
- ถ้า mat1[i,j]> mat2[i,j] แล้ว
- สลับ mat1[i, j] และ mat2[i, j]
- ถ้า mat1[i,j]> mat2[i,j] แล้ว
- สำหรับฉันในช่วง 0 ถึงแถว - 1 ทำ
- สำหรับ j ในช่วง 0 ถึง col-2 ทำ
- ถ้า mat1[i, j]>=mat1[i, j + 1] หรือ mat2[i, j]>=mat2[i, j + 1] แล้ว
- คืนค่าเท็จ
- ถ้า mat1[i, j]>=mat1[i, j + 1] หรือ mat2[i, j]>=mat2[i, j + 1] แล้ว
- สำหรับ j ในช่วง 0 ถึง col-2 ทำ
- สำหรับฉันในช่วง 0 ถึงแถวที่ 2 ทำ
- สำหรับ j ในช่วง 0 ถึง col - 1 ทำ
- ถ้า mat1[i, j]>=mat1[i + 1, j] หรือ mat2[i, j]>=mat2[i + 1, j] แล้ว
- คืนค่าเท็จ
- ถ้า mat1[i, j]>=mat1[i + 1, j] หรือ mat2[i, j]>=mat2[i + 1, j] แล้ว
- สำหรับ j ในช่วง 0 ถึง col - 1 ทำ
- สำหรับ j ในช่วง 0 ถึง col - 1 ทำ
- คืนค่า True
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def Solve(mat1, mat2):row =len(mat1) col =len(mat1[0]) for i in range(row):for j in range(col):if mat1[i][j]> mat2[i][j]:mat1[i][j], mat2[i][j]=mat2[i][j], mat1[i][j] สำหรับฉันในช่วง (แถว):สำหรับ j in range(col-1):if mat1[i][j]>=mat1[i][j + 1] or mat2[i][j]>=mat2[i][j + 1]:คืนค่า False สำหรับ ฉันอยู่ในช่วง (แถว-1):สำหรับ j ในช่วง (col):ถ้า mat1[i][j]>=mat1[i + 1][j] หรือ mat2[i][j]>=mat2[i + 1][j]:return False return Truemat1 =[[7, 15], [16, 10]]mat2 =[[14, 9], [8, 17]]print(solve(mat1, mat2))ก่อน>อินพุต
[[7, 15],[16, 10]],[[14, 9],[8, 17]]ผลลัพธ์
จริง