Print all palindromic paths from top left to bottom right in a matrix
Last Updated :
18 Sep, 2023
Given a matrix containing lower alphabetical characters only, we need to print all palindromic paths in given matrix. A path is defined as a sequence of cells starting from top-left cell and ending at bottom-right cell. We are allowed to move to right and down only from current cell. We cannot go down diagonally.
Example:
Input : mat[][] = {"aaab”,
"baaa”
“abba”}
Output :aaaaaa, aaaaaa, abaaba
Explanation :
aaaaaa (0, 0) -> (0, 1) -> (1, 1) ->
(1, 2) -> (1, 3) -> (2, 3)
aaaaaa (0, 0) -> (0, 1) -> (0, 2) ->
(1, 2) -> (1, 3) -> (2, 3)
abaaba (0, 0) -> (1, 0) -> (1, 1) ->
(1, 2) -> (2, 2) -> (2, 3)
Order of elements in the output array doesn’t matter.
The idea is simple. We start from top left (0, 0) and explore all paths to bottom right. If a path turns to be palindrome, we print it.
C++
Java
public class PalinPath {
public static boolean isPalin(String str)
{
int len = str.length() / 2 ;
for ( int i = 0 ; i < len; i++) {
if (str.charAt(i) != str.charAt(str.length() - i - 1 ))
return false ;
}
return true ;
}
public static void palindromicPath(String str, char a[][],
int i, int j, int m, int n)
{
if (j < m - 1 || i < n - 1 ) {
if (i < n - 1 )
palindromicPath(str + a[i][j], a, i + 1 , j, m, n);
if (j < m - 1 )
palindromicPath(str + a[i][j], a, i, j + 1 , m, n);
}
else {
str = str + a[n - 1 ][m - 1 ];
if (isPalin(str))
System.out.println(str);
}
}
public static void main(String args[])
{
char arr[][] = { { 'a' , 'a' , 'a' , 'b' },
{ 'b' , 'a' , 'a' , 'a' },
{ 'a' , 'b' , 'b' , 'a' } };
String str = "" ;
palindromicPath(str, arr, 0 , 0 , 4 , 3 );
}
}
|
Python 3
def isPalin( str ):
l = len ( str ) / / 2
for i in range ( l) :
if ( str [i] ! = str [ len ( str ) - i - 1 ]):
return False
return True
def palindromicPath( str , a, i, j, m, n):
if (j < m - 1 or i < n - 1 ) :
if (i < n - 1 ):
palindromicPath( str + a[i][j], a,
i + 1 , j, m, n)
if (j < m - 1 ):
palindromicPath( str + a[i][j], a,
i, j + 1 , m, n)
else :
str = str + a[n - 1 ][m - 1 ]
if isPalin( str ):
print ( str )
if __name__ = = "__main__" :
arr = [[ 'a' , 'a' , 'a' , 'b' ],
[ 'b' , 'a' , 'a' , 'a' ],
[ 'a' , 'b' , 'b' , 'a' ]]
str = ""
palindromicPath( str , arr, 0 , 0 , 4 , 3 )
|
C#
using System;
class GFG
{
public static bool isPalin( string str)
{
int len = str.Length / 2;
for ( int i = 0; i < len; i++)
{
if (str[i] != str[str.Length - i - 1])
{
return false ;
}
}
return true ;
}
public static void palindromicPath( string str, char [][] a,
int i, int j, int m, int n)
{
if (j < m - 1 || i < n - 1)
{
if (i < n - 1)
{
palindromicPath(str + a[i][j],
a, i + 1, j, m, n);
}
if (j < m - 1)
{
palindromicPath(str + a[i][j],
a, i, j + 1, m, n);
}
}
else
{
str = str + a[n - 1][m - 1];
if (isPalin(str))
{
Console.WriteLine(str);
}
}
}
public static void Main( string [] args)
{
char [][] arr = new char [][]
{
new char [] { 'a' , 'a' , 'a' , 'b' },
new char [] { 'b' , 'a' , 'a' , 'a' },
new char [] { 'a' , 'b' , 'b' , 'a' }
};
string str = "" ;
palindromicPath(str, arr, 0, 0, 4, 3);
}
}
|
Javascript
<script>
function isPalin(str)
{
let len = str.length / 2;
for (let i = 0; i < len; i++) {
if (str[i] != str[str.length - i - 1])
return false ;
}
return true ;
}
function palindromicPath(str,a,i,j,m,n)
{
if (j < m - 1 || i < n - 1) {
if (i < n - 1)
palindromicPath(str + a[i][j], a,
i + 1, j, m, n);
if (j < m - 1)
palindromicPath(str + a[i][j], a, i,
j + 1, m, n);
}
else {
str = str + a[n - 1][m - 1];
if (isPalin(str))
document.write(str+ "<br>" );
}
}
let arr = [[ 'a' , 'a' , 'a' , 'b' ],
[ 'b' , 'a' , 'a' , 'a' ],
[ 'a' , 'b' , 'b' , 'a' ]]
let str = ""
palindromicPath(str, arr, 0, 0, 4, 3)
</script>
|
Output :
abaaba
aaaaaa
aaaaaa
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...