使用 C++ 列印 m x n 矩陣中從左上角到右下角的所有可能路徑
在這個問題中,我們給定一個 m x n 的二維矩陣,我們需要打印出從左上角到右下角的所有可能路徑。在遍歷過程中,我們只能在矩陣中向右或向下移動。
讓我們舉個例子來更好地理解這個主題。
Input: 1 3 5 2 8 9 Output: 1 -> 3 -> 5 -> 9 1 -> 3 -> 8 -> 9 1 -> 2 -> 8 -> 9
為了解決這個問題,我們將從一個單元格移動到另一個單元格,並在向下和向右移動時列印路徑。我們將對矩陣中的每個單元格遞迴執行此操作。
示例
讓我們看看一個實現遞迴演算法的程式
#include<iostream>
using namespace std;
void printPathTPtoBR(int *mat, int i, int j, int m, int n, int *path, int pi) {
if (i == m - 1){
for (int k = j; k < n; k++)
path[pi + k - j] = *((mat + i*n) + k);
for (int l = 0; l < pi + n - j; l++)
cout << path[l] << " ";
cout << endl;
return;
}
if (j == n - 1){
for (int k = i; k < m; k++)
path[pi + k - i] = *((mat + k*n) + j);
for (int l = 0; l < pi + m - i; l++)
cout << path[l] << " ";
cout << endl;
return;
}
path[pi] = *((mat + i*n) + j);
printPathTPtoBR(mat, i+1, j, m, n, path, pi + 1);
printPathTPtoBR(mat, i, j+1, m, n, path, pi + 1);
}
void findPath(int *mat, int m, int n) {
int *path = new int[m+n];
printPathTPtoBR(mat, 0, 0, m, n, path, 0);
}
int main() {
int mat[2][3] = { {1, 2, 3}, {4, 5, 6} };
cout<<"Path from top-left to bottom-rigth of matrix are :\n";
findPath(*mat, 2, 3);
return 0;
}輸出
矩陣從左上角到右下角的路徑如下:
1 4 5 6 1 2 5 6 1 2 3 6
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP