Es gibt keine Notwendigkeit zu konvertieren. Stellen Sie sich vor, dass Sie an einem Punkt sind (i, j). (Ich nehme an, dass Sie von jedem Feld aus vier Züge haben dürfen). Dann können Sie entweder (i + 1, j), (i, j + 1), (i - 1, j), (i, j - 1) wählen, wenn:
1) Dieser Index ist innen die Tabelle 2) Dieser Index ist nicht mit X markiert
So geben Sie die Position von Quadrat S zu Ihrem Dijkstra-Algorithmus. Und jedes Mal, wenn Sie die neue Menge erlaubter Quadrate zu Ihrer Datenstruktur hinzufügen. Sobald Sie die Position von D erreichen, drucken Sie es aus.
Außerdem scheint dieses Problem nicht zu mir gewichtet, so dass Sie eine einfache BFS sowie eine Warteschlange verwenden können. Aber wenn Sie Dijkstra benutzen und zu verschiedenen Plätzen gehen möchten, hat das unterschiedliche Kosten. Sie verwenden eine Prioritätswarteschlange statt einer Warteschlange. Zum Beispiel können Sie eine Reihe Datenstruktur wie folgt verwenden:
int dist[][]; // this contains the cost to get to some square
//dist is initialized with a large number
struct node{
int i, j; //location
node(int ii, int jj){
i = ii;
j = jj;
}
bool operator < (node &n)const{ //set in c++ will use this to sort
if(dist[i][j] == dist[n.i][n.j]) return i < n.i || j < n.j; //this is necessary
return dist[i][j] < dist[n.i][n.j];
}
};
set <node> q;
int main(){
//initialized dist with large number
dist[S.i][S.j] = 0; //we start from source
q.push(node(S.i, S.j));
while(true){
//pick the first element in set
//this element has the smallest cost
//update dist using this node if necessary
//for every node that you update remove from q and add it again
//this way the location of that node will be updated in q
//if you see square 'D' you are done and you can print dist[D.i][D.j]
}
return 0;
}
hm vielleicht das falsche Ort, um diese Art von Frage zu stellen (aber was ich weiß nicht, ..) versuchen, die Frage zu ändern, einige Code veröffentlichen du hast dich auf ein einzelnes problem konzentriert .. das ist viel zu groß und zu theoretisch .. – nayana
gib uns bitte auch mehr informationen über dein problem ... zum beispiel: kann ich diagonal gehen? also sagen wir von D über die 4 zu S? oder nur vertikal und horizontal? Weiter: Möchten Sie an der 2D-Matrix oder der Noeliste adj.matrix/list arbeiten oder wie eine verkettete Liste (Knoten, die verbunden sind) ... – Thomas
BTW: Möchten Sie nur wissen, wie Sie konvertieren? oder hast du auch probleme die dijkstra zu programmieren? – Thomas