在C ++中以矩阵形式打印从左上到右下的所有回文路径
本文向大家介绍在C ++中以矩阵形式打印从左上到右下的所有回文路径,包括了在C ++中以矩阵形式打印从左上到右下的所有回文路径的使用技巧和注意事项,需要的朋友参考一下
在这个问题中,我们给了一个包含词首字母的混合词(仅小写字母),并且必须在给定矩阵中从矩阵的左上角到右下角打印所有古罗马式的路径。
在此问题上允许的动作是正确的。不允许对角移动。
让我们以一个例子来理解这个问题:
Input: matrix[][] ={ {"xxxy", "yxxx", "xyyx"}Output: xxxxxx , xxxxxx , xyxxyx
讲解
让我们使用位置wrt到第i个位置查看从左上到右下的所有有效移动。
i00 -> i01 -> i02 -> i03 -> i13 -> i23 = xxxyxx i00 -> i01 -> i11 -> i12 -> i13 -> i23 = xxxxxx . . . i00 -> i10 -> i20 -> i21 -> i22 -> i23 = xyxyyx
在所有可能的结果中,我们仅需要回文路径即可:
i00 -> i01 -> i11 -> i12 -> i13 -> i23 = xxxxxx i00 -> i01 -> i02 -> i12 -> i13 -> i23 = xxxxxx i00 -> i10 -> i11 -> i12 -> i22 -> i23 = xyxxyx
在解释本身中,我们奠定了解决问题的基础。我们将找到从左上角到右下角的所有路径,并打印所有可得出回文路径的路径。
下面的示例将说明解决方案:
示例
#include<iostream> using namespace std; #define N 4 int printPalindrome(string str){ int len = str.length() / 2; for (int i = 0; i < len; i++) { if (str[i] != str[str.length() - i - 1]) return 0; } cout<<str<<endl; } void findPath(string str, char a[][N], int i, int j, int m, int n) { if (j < m - 1 || i < n - 1) { if (i < n - 1) findPath(str + a[i][j], a, i + 1, j, m, n); if (j < m - 1) findPath(str + a[i][j], a, i, j + 1, m, n); } else { str = str + a[n - 1][m - 1]; printPalindrome(str) ; } } int main() { char matrix[][N] = { { 'x', 'y', 'x', 'y' }, { 'y', 'x', 'x', 'y' }, { 'y', 'x', 'y', 'x' } }; string str = ""; cout<<"Palimdromic path are : "; findPath(str, matrix, 0, 0, 4, 3); return 0; }
输出结果
Palimdromic path are : xyxxyx xyxxyx xyxxyx xyxxyx xyxxyx xyxxyx xyxxyx xyxxyx