gedanken fehler beim algo?
-
so, ich hab einen Dijkstra algo.
Nun hab ich hin so umgeschrieben, das die Kanten die Richtung angeben.
Im Sinne:
0 > oben
1 > obenrechts
2 > untenrechts
3 > unten
4 > untenlinks
5 > obenlinksUnd anstelle, das er mir die Kantenlaenge zusammen rechnet,
haengt er es ab einen string an.Nun nimmt er den weg, der am wenigsten im string hat.
Auch genannt als kuerzester Weg.Aber macht er dies nicht immer!
z.B:
von 1 zu 9 > 00 (stimmt)
von 1 zu 7 > 04 (falsch, der weg ist: 5)Um zu wissen was ich meine, hier die Karte:
http://www.soi.ch/contest/2005/round1/tasks/obelixsuchtidefix/pics/spirale.gifHier mein Dijkstra code:
typedef std::string Nodelabel; typedef std::map<Nodelabel, Nodelabel> Nodelist; typedef std::map<Nodelabel, Nodelist> Graph; typedef std::pair<Nodelabel, Nodelabel> Edg; bool operator>(const Edg r, const Edg k){ return (r.first).size()>(k.first).size(); } void dijkstra(Graph &graph, Nodelabel source, Nodelist &distance){ //dijkstra algo. Berechnet den weg distance.clear(); std::priority_queue<Edg, std::vector<Edg>, std::greater<Edg> > que; que.push(Edg("", source)); while(!que.empty()){ Edg tmped=que.top(); Nodelabel tmpnl=tmped.second; que.pop(); if(distance.count(tmpnl)==0){ Nodelabel dist=tmped.first; distance[tmpnl]=dist; Nodelist tempgraph=graph[tmpnl]; Nodelist::iterator it; for(it=tempgraph.begin(); it!=tempgraph.end(); ++it){ Nodelabel distint=it->second; Nodelabel distlabel=it->first; que.push(Edg(dist+distint, distlabel)); } if(tmpnl=="I") continue; } } }
Hat jemand ne idee, wo mein gedanken fehler ist?
Danke,
Ghost