Учитывая M * N матрицу символов, найдите длину самого длинного пути в матрице, начиная с заданного источника.
Примечание. Все символы в самом длинном пути должны увеличиваться и располагаться друг за другом в алфавитном порядке. Нам разрешено искать следующего персонажа во всех 8 направлениях.
Я правильно определил длину последовательности, но в пути есть проблема. путь неверен.
Вот мой код
#include<iostream>
#include<vector>
using namespace std;
//Below array details all 8 posible directions
int row[] = { -1,-1,-1, 0, 0, 1, 1, 1 };
int col[] = { 1, 0, -1, 1,-1, -1,0, 1 };
int length(char arr[][5], int x, int y, char previous, vector<pair<int,int> > &path, int k)
{
// x and y must be bounded between 0 to 4
if( x < 0 || x > 4 || y > 4 || y < 0)
return 0;
int l = 0;
int max_length = 0;
for( int i = 0; i < 8; i++)
{
// storing next character in search
char ch = arr[x+row[i]][y+col[i]];
//checking whether ch is the next character in the sequence or not
if(ch == previous + 1)
{
//if k != path.size() then we have taken back in
// the sequence so no need to push back character in the path
if(k == path.size())
{
// Pushing co-ordinates of next valid character
path.push_back(make_pair(x+row[i], y+col[i]));
}
else
path.pop_back();
l = 1 + length(arr, x+row[i], y+ col[i], ch , path, ++k);
max_length = max( l, max_length);
}
}
return max_length;
}
int main()
{
char arr[5][5] = {
{ 'd','e','h','x','b'},
{ 'a','o','g','p','e'},
{ 'd','d','c','f','d'},
{ 'e','b','e','a','s'},
{ 'c','d','y','e','n'}
};
vector<pair<int,int> > path;
//Pusing source address
path.push_back(make_pair(2,2));
int k = 1;
int Len = length(arr, 2, 2 , arr[2][2], path, k);
cout << "Length of the Longest sequence is : " << Len + 1 <<endl;
//printing the path
cout << "Path is : "<<endl;
for( pair<int,int> i : path)
{
cout <<"( " << i.first <<","<<i.second <<" )" ;
}
return 0;
}
Фактический результат:
Длина самой длинной последовательности: 6
Путь
( 2,2) (2,1) (3,0) (3,2) (2,3) (1,2) (0,2)
Ожидаемая производительность
Длина самой длинной последовательности: 6
Путь
(2,2) (2,1) (3,2) (2,3) (1,2) (0,2)
В моем выводе есть дополнительная (3,0). Когда я возвращаюсь из (3,0), я не могу выдвинуть его.
Любая помощь будет оценена.