Liny_@NotePad

沉迷ACG中

【模板】Dijkstra - 单源最短路径

YOYO posted @ 2008年12月07日 20:49 in 【算法】与【数据结构】 with tags dijkstra 单源最短路径 , 2139 阅读

  当年整理得 - -

  1. #define N 1002
  2. #define MAX 99999
  3. int edges[N][N],d[N],n;
  4.  
  5. void dijkstra(int v)
  6. {
  7.         int i,j;
  8.         bool s[N]={false};
  9.         for(i=1;i<=n;i++)
  10.                 d[i]=edges[v][i];
  11.         d[v]=0;s[v]=true;
  12.         for(i=1;i<n;i++)
  13.         {
  14.                 int temp=MAX;
  15.                 int u=v;
  16.                 for(j=1;j<=n;j++)
  17.                         if((!s[j])&&(d[j]<temp))
  18.                         {
  19.                                 u=j;
  20.                                 temp=d[j];
  21.                         }
  22.                         s[u]=true;
  23.                         for(j=1;j<=n;j++)
  24.                                 if((!s[j])&&(edges[u][j]<MAX)&&(d[u]+edges[u][j])<d[j])
  25.                                         d[j]=d[u]+edges[u][j];
  26.         }
  27.  
  28. }

调用时,初始结点s,目标结点e,则
dijkstra(s);
cout<<d[e]<<endl;
即可。

注意结点是从1存储到N。
不能连通时值为MAX。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter