我需要找到最长的路径,直到点的值越来越大。首先,我找到最长路径的步数,然后使用DFS搜索地图中的所有点,看看它们是否提供了具有该步数的解决方案。
在我运行地图以发现步数时,我知道它将至少是O(L * C),即L和C是地图的大小。但是我找不到下一步该做什么。
void dfsRA(VERTICE** mapa, int L, int C, int x1, int y1, int x2, int y2){
a=0;
mapa[x2][y2].pre = cnt++;
int X=x2,Y=y2;
//Vai procurar os adjacentes no máximo de oito direções
for(int n=0; n<8;n++){
if(n==0){
x2=x1+1;
y2=y1+1;
}
if(n==1){
x2=x1+1;
y2=y1;
}
if(n==2){
x2=x1+1;
y2=y1-1;
}
if(n==3){
x2=x1;
y2=y1+1;
}
if(n==4){
x2=x1;
y2=y1-1;
}
if(n==5){
x2=x1-1;
y2=y1+1;
}
if(n==6){
x2=x1-1;
y2=y1;
}
if(n==7){
x2=x1-1;
y2=y1-1;
}
//Verifica se o adjacente existe no mapa
if(x2<L && x2>=0 && y2>=0 && y2<C){
//Verifica se o adjacente ainda não foi visitado e se o seu valor é estritamente maior
if(mapa[x2][y2].pre == -1 && mapa[x2][y2].valor>mapa[x1][y1].valor && i>0){
i--;
a++;
auxiliar++;
mapa[x2][y2].caminho= auxiliar;
dfsRA(mapa, L, C, x2, y2, x2, y2);
}}
x2=X;
y2=Y;
}
//Realiza o backtrack caso chegue a um ponto onde é impossivél continuar
//e limpa o vetor pre e retira o ponto do caminho(solução)
if(a==0 && i >0 && arraysize(mapa,L,C)>0){
mapa[X][Y].caminho= 0;
auxiliar--;
mapa[X][Y].pre= -1;
i++;
}
}