กำหนดเมทริกซ์ 2 มิติที่มีขนาดแถว X col เป้าหมายคือการนับจำนวนวิธีที่เราสามารถข้ามเมทริกซ์จากเซลล์ 0,0 ไปยังแถวเซลล์ โดยใช้การเคลื่อนที่ไปทางขวาและลงเท่านั้น กล่าวคือ การย้ายครั้งแรกอาจเป็น 0,0 ถึง 0,1 (ลง) หรือ 1,0 (ขวา) และไม่ใช่ 1,1(แนวทแยง)
ตัวอย่าง
อินพุต
col = 2; row = 4
ผลลัพธ์
Count of number of ways to traverse a Matrix are: 4
คำอธิบาย
วิธีที่เราสามารถเข้าถึงได้จากเซลล์ 0,0 ถึง 2,4 แสดงไว้ -
อินพุต
col = 4; row = 3
ผลลัพธ์
Count of number of ways to traverse a Matrix are: 10
คำอธิบาย
We will reduce the problem into smaller recursions. Count ways for col=3, row=2, then for col=2, row=1 ….. For col=1 or row=1 the answer will be 1. (only right or only down move).
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
ในแนวทางนี้ เราจะใช้วิธีเรียกซ้ำ ในตอนท้ายสำหรับแถวหรือแถวที่ 1 มีทางเดียวเท่านั้นคือ 1 ย้ายขวาตรงหรือ 1 ลงตรงๆ นี่จะเป็นเงื่อนไขสิ้นสุดสำหรับการเรียกซ้ำ
-
นำแถวจำนวนเต็ม col สำหรับมิติข้อมูลเมทริกซ์
-
ฟังก์ชัน way_traverse_matrix(แถว int, int col) ใช้มิติข้อมูลและคืนค่าจำนวนวิธีในการสำรวจเมทริกซ์
-
สำหรับ row==1 ให้คืนค่า 1
-
สำหรับ col==1 ให้คืนค่า 1
-
อย่างอื่นคำนวณวิธีโดยใช้การเรียกซ้ำ way_traverse_matrix(temp_1, col) +ways_traverse_matrix(row, temp_2)
-
ที่นี่ temp_1=หมายเลขแถวก่อนหน้า และ temp_2=หมายเลขคอลัมน์ก่อนหน้า
-
ในตอนท้ายเราจะนับวิธีทั้งหมด
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int ways_traverse_matrix(int row, int col){ if (row == 1){ return 1; } else if(col == 1){ return 1; } else { int temp_1 = row − 1; int temp_2 = col − 1; return ways_traverse_matrix(temp_1, col) + ways_traverse_matrix(row, temp_2); } } int main(){ int col = 2; int row = 2; cout<<"Count the number of ways to traverse a Matrix are: "<<ways_traverse_matrix(row, col); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count the number of ways to traverse a Matrix are: 2