http://www.cnblogs.com/wuying/archive/2008/08/04/1259841.html
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092258zQX.gif)
//使用静态连接表实现dijkstra
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092258zQX.gif)
//路径无穷远,则返回-1;否则返回最短路径,
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092258zQX.gif)
#include <iostream>
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092258zQX.gif)
#include <queue>
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092258zQX.gif)
using namespace std;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092258zQX.gif)
typedef struct
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092259C0B.gif)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
long v;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
long next;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
long cost;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092301CsS.gif)
}Edge;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092258zQX.gif)
typedef struct
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092259C0B.gif)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
long v;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
long cost;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092301CsS.gif)
}node;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092258zQX.gif)
bool operator <(const node &a,const node &b)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092259C0B.gif)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
return a.cost>b.cost;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092301CsS.gif)
}
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092258zQX.gif)
const long MAXN=100010;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092258zQX.gif)
priority_queue<node> q;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092258zQX.gif)
long p[MAXN];//MAIN函数里元素初始化为-1;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092258zQX.gif)
Edge e[2*MAXN];//静态邻接表
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092258zQX.gif)
bool vist[MAXN];
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092258zQX.gif)
long Dijkstra(long Start,long End)//开始点,结束点
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092259C0B.gif)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
memset(vist,0,sizeof(vist));
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
while (!q.empty())
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092302dzH.gif)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
q.pop();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092303YPU.gif)
}
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
long cost=0;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
node t;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
t.cost=0;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
t.v=Start;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
q.push(t);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
while (!q.empty())
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092302dzH.gif)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
t=q.top();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
q.pop();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
if (t.v==End)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092302dzH.gif)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
break;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092303YPU.gif)
}
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
if (vist[t.v])
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092302dzH.gif)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
continue;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092303YPU.gif)
}
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
vist[t.v]=true;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
long j;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
for (j=p[t.v];j!=-1;j=e[j].next)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092302dzH.gif)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
if (!vist[e[j].v])
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092302dzH.gif)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
node temp;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
temp.v=e[j].v;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
temp.cost=e[j].cost+t.cost;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
q.push(temp);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092303YPU.gif)
}
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092303YPU.gif)
}
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092303YPU.gif)
}
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
if (t.v==End)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092302dzH.gif)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
cost=t.cost;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092303YPU.gif)
}
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
else
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092302dzH.gif)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
cost=-1;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092303YPU.gif)
}
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0923006VC.gif)
return cost;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/092301CsS.gif)
}