Я пытался решить проблему в комбинациях.У меня есть матрица 6X6. Я пытаюсь найти в матрице все комбинации длины 8.
Мне нужно перейти от соседа к соседу из каждой строки, позиции столбца, и я написал рекурсивную программу, которая генерирует комбинациюно проблема в том, что он генерирует много дубликатов, а значит, неэффективен.Я хотел бы знать, как я могу устранить подсчет дубликатов и сэкономить время.
int a={{1,2,3,4,5,6},
{8,9,1,2,3,4},
{5,6,7,8,9,1},
{2,3,4,5,6,7},
{8,9,1,2,3,4},
{5,6,7,8,9,1},
}
void genSeq(int row,int col,int length,int combi)
{
if(length==8)
{
printf("%d\n",combi);
return;
}
combi = (combi * 10) + a[row][col];
if((row-1)>=0)
genSeq(row-1,col,length+1,combi);
if((col-1)>=0)
genSeq(row,col-1,length+1,combi);
if((row+1)<6)
genSeq(row+1,col,length+1,combi);
if((col+1)<6)
genSeq(row,col+1,length+1,combi);
if((row+1)<6&&(col+1)<6)
genSeq(row+1,col+1,length+1,combi);
if((row-1)>=0&&(col+1)<6)
genSeq(row-1,col+1,length+1,combi);
if((row+1)<6&&(row-1)>=0)
genSeq(row+1,col-1,length+1,combi);
if((row-1)>=0&&(col-1)>=0)
genSeq(row-1,col-1,length+1,combi);
}
Я также думал о написании динамической программы, в основном рекурсии с запоминанием.Это лучший выбор?если да, то мне не понятно, как реализовать это в рекурсии.Действительно ли я зашел в тупик с подходом ???
Спасибо
Изменить Например, результат 12121212,12121218,12121219,12121211,12121213.
ограничения заключаются в том, что вы должны перейти к своему соседу из любой точки, вы должны начать для каждой позиции в матрице, то есть для каждой строки, столбец.Вы можете перемещаться по одному шагу за раз, то есть вправо, влево, вверх, вниз и обе диагональные позиции.Проверьте условия if.т.е. если вы в (0,0), вы можете перейти к (1,0) или (1,1) или (0,1), то есть к трем соседям.если вы в (2,2), вы можете перейти к восьми соседям.
и так далее ...