Nicht, dass ich Zeit habe, dies richtig zu diskutieren, um zu einer Schlussfolgerung zu gelangen und meinen Code anzupassen, weil die Phase eins (von drei) eines Schulprojekts in 24 Stunden ist, aber zumindest muss ich wissen, ob ich die richtige Entscheidung getroffen habe.Wie wird ein bestimmter Knoten in einer Graphenstruktur in C gesucht?
Ich bin verkettete Listen mit und hier ist meine Strukturen:
typedef struct sCity {
int cityID;
char *cityName;
struct sCityLink *links;
struct sCity *next;
} nCity, *City;
typedef struct sCityLink {
City cityLinkParent;
City cityLinkTo;
struct sCityLink *next;
} nCityLink, *CityLink;
Grundsätzlich habe ich viele Städte und die Städte sind alle miteinander verbunden sind, wie ein Diagramm. Zum Beispiel A, B, C, D und E werden sie in dieser Reihenfolge in die Struktur City eingefügt. Dann verbinde ich A mit B, C und D, B mit C, D, E, C mit D und E und D mit E.
Nun, sagen wir, ich muss in die Stadt E gehen. Dies ist die letzte eine in der verknüpften Liste und es braucht Zeit, um die verknüpfte Liste vollständig zu durchlaufen. Vielleicht nicht in diesem Beispiel mit 5 Städten, aber in der echten App soll ich mindestens 10.000 Städte unterstützen. Aber der kürzeste Weg ist von A (was der Startpunkt ist) von C nach E (oder es könnte A-D-E oder A-B-E sein, spielt keine Rolle).
Erlauben meine Strukturen mir, den kürzesten Weg von A nach E zu finden, ohne die gesamte verkettete Liste einzeln zu durchlaufen? Wenn nicht, was mache ich falsch?
Wenn ja, wie kann ich das tun? Ich habe keine Ahnung, wie ich einen solchen Pfad finden kann ...
Ich sehe, wenn ich eine bestimmte Stadt brauche, muss ich nur die Liste durchqueren, bis ich sie finde. Wenn ich die kürzeste Route zwischen zwei Punkten finden muss, benutze ich BFS, richtig? –
Ja, und sie sind etwas verbunden - Sie starten BFS mit dem City-Zeiger von mindestens einer der beiden Städte. – jpalecek