私はDijkstraアルゴリズムを実装してグラフ内で最短経路を見つけようとしていますが、私が進むにつれていくつかのエラーが発生しています。最初に、ここに実際の質問とそれが与えられたコンポーネントがあります。最短経路を見つけるためのダイクストラのアルゴリズム?
"Dijkstraのアルゴリズムをグラフ上に実装するためのC++関数を書くグラフの実装はIntroToGraphs.zipと呼ばれるMoodle上で行われます。関数は2つのパラメータをとります:頂点と終点の開始点最短経路と最短距離開始頂点からデスティネーション頂点までの距離。
void Graph :: Dijkstra(文字列の開始、文字列の宛先);
頂点構造が「visited」、「distance」、「previous」を含むように変更されました。ここで
struct adjVertex{
vertex *v;
int weight;
};
struct vertex{
std::string name;
bool visited;
int distance;
vertex *previous;
std::vector<adjVertex> adj;
};
はグラフクラスの定義です:
void Graph::Dijkstra(string starting, string destination){
vertex * start;
vertex * ending;
for(int i=0;i<vertices.size();i++){
vertices[i].visited=false;
vertices[i].distance=INT_MAX;
vertices[i].previous=NULL;
if(vertices[i].name==starting){
start=&vertices[i];
}
if(vertices[i].name==destination){
ending=&vertices[i];
}
}
start->visited=true;
start->distance=0;
vector<vertex *> solved;
vector<vertex *> path;
vertex *tmp;
vertex *parent;
while(!ending->visited){ //pseudo territory
int minDistance=INT_MAX;
tmp=NULL;
for(int i=0;i<solved.size();i++){
vertex * s=solved[i];
for(int y=0;y<s->adj.size();y++){
if(!s->adj[y].v->visited){
s->distance=s->distance+s->adj[y].v->distance;
if(s->distance<minDistance){
tmp=s->adj[y].v;
minDistance=s->distance;
parent=s->previous;
}
}
}
}
}
tmp->distance=minDistance;
tmp->previous=parent;
tmp->visited=true;}
私はこのコードで打ってる誤りがそのminDistanceです:
class Graph
{
public:
Graph();
~Graph();
void addEdge(std::string v1, std::string v2, int weight);
void addVertex(std::string name);
void displayEdges();
void Dijkstra(string sourceVertex, string destinationVertex);
protected:
private:
std::vector<vertex> vertices;
};
ここで私が書いたコードです私はそれにtmp-> distanceを設定すると、一番下の未確認の変数です。私が修正する必要があることについての手がかりは?