在C++中列印矩陣中從左上角到右下角的所有路徑,允許四種移動方式


在這個問題中,我們給定一個mXn的二維矩陣,我們必須列印從矩陣左上角到右下角的所有可能的路徑。對於遍歷,我們可以在所有四個方向上移動,即左、右、上、下。

雖然向右和向上的移動很少使用,但有時它們可能會有益。

讓我們來看一個例子來更好地理解這個主題

輸入

1 3 5

2 8 9

輸出

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;
}

輸出

Path from top-left to bottom-rigth of matrix are :
1 4 5 6
1 2 5 6
1 2 3 6

更新於:2020年1月16日

194 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告