我为Dijkstra的algoritm使用了以下代码:
int Graph::ShortestPath(Vertex *start, Vertex *end)
{
int posStart = IndexOfNode(start);
int posEnd = IndexOfNode(end);
int result;
bool visit[cntNodes];
int distance[cntNodes];
// Initialization: set every distance to -1 until we discover a path
for (int i = 0; i < cntNodes; i++) {
visit[i] = false;
distance[i] = -1;
} // for
// The distance from the source to the source is defined to be zero
distance[posStart] = 0;
Queue *q = new Queue(maxNodes);
q->Enqueue(posStart);
while (!q->Empty()) {
int next, alternative;
q.Dequeue(next);
for (int i = 0; i < cntNodes; i++) {
if (adjmatrix[next][i]) {
alternative = distance[next] + adjmatrix[next][i];
if (visit[i]) {
if (alternative < distance[i]) {
distance[i] = alternative;
q.Enqueue(i);
} // if
}// if
else {
distance[i] = alternative;
visit[i] = true;
q.Enqueue(i);
} // else
} // if
} // for
}
delete q;
result = distance[posEnd];
delete[] visit;
delete[] distance;
return result;
}现在,我使用自己创建的一个名为Queue的类:
Queue *q = new Queue(maxNodes)有没有什么C++标准队列可以用来代替我自己的实现。
我只需要这个功能:
Queue *q = new Queue(maxNodes);
q->Enqueue(posStart);
q.Dequeue(next);谢谢!
发布于 2012-12-12 04:06:29
是。请查看标准模板库中的这个集合类和许多其他集合类。
这里有一个链接:http://www.cplusplus.com/reference/queue/queue/
发布于 2012-12-12 04:10:19
priority_queue非常适合于Dijkstra算法,并降低了算法的运行时复杂度(与普通队列相比)
发布于 2012-12-12 04:11:54
至少有三件事浮现在我的脑海中:
在C++标准库中还可以找到其他容器和算法。
https://stackoverflow.com/questions/13827636
复制相似问题