总觉得前点时间写的Dijkstra,有点繁琐,还是用回邻接表和优先队列感觉舒服点。
废话就不多说了,原先那篇邻接矩阵的Dijkstra链接如下:http://blog.csdn.net/betabin/article/details/7375803
这次改为优先队列,则需要一个Vertex结构,记录其序号及到起点的cost。每次push进去队列之前,都刷新其最新cost。并且加了些辅助变量,如判断是否已经处理过该节点的bool数组等。改用邻接表的话,则是感觉空间比较好,感觉也是比较舒服。
这次的代码如下:
#include <iostream>
#include <queue>
#define MAX_EDGE 30
#define MAX_VERTEX 10
#define INFINITE 0x7fffffff
#define AL_END -1
using namespace std;
struct Vertex
{
int vertex;
int cost;
};
bool operator < (const Vertex &a, const Vertex &b)
{
return a.cost > b.cost;
}
struct AlEdge
{
int next;
int vertex;
int cost;
};
class AlGraph
{
public:
int source;
int destination;
int edgeNum;
int vertexNum;
int allCost;
void Dijkstra();
private:
AlEdge edge[MAX_EDGE];
priority_queue&