仔細分析Dijkstra算法的執行過程可以發現,它與洪水泛濫有些類似。把圖節點想象成洪水將要經過的城鎮,所有邊想象連接城鎮的河道,假定洪水在源點突然爆發。
       在時刻0,洪水從源頭A城開始泛濫。洪水檢測員可以估計洪水到達B城、C城、G城、D城的時刻分別為第i、j、k、t小時,i有限小而j,k,t為無窮大因為他們絕不與A城相鄰,而B卻與之相鄰。前者是最保守的估計--- 情況不可能更糟了。若洪水監測員的職責僅僅是正確預報各個城市最早被淹的時間,則他大可高枕無憂睡上 min{i,j,k,t}=i 小時。當洪水到達B時,監測員著手檢查所有與B相鄰的有河道相鄰又尚未被淹的城市,假定發現洪流從B推進到C、D、G的時間分別為12、5、7小時,于是他將C、D、G被淹時刻提前到12+j,5+k,7+t。而這個將時刻提前的動作就是Dijkstra算法里的降距操作。

int Dijkstra(int n,int s,int t, int path[])   // s為源,t為目標終點,path[n]用于跟蹤各節點到源的最短路徑
{
   
int i,j,w,minc,d[N],mark[N];
  
   memset(mark,
0,sizeof(mark));
   
for (i=0;i<n;i++)
    
{
       d[i]
=g[s][i];    // 初始化點i到源的最短路,有弧賦權,無弧的置為正無窮
       path[i]=s;
    }

   mark[s]
=1;
   path[s]
=-1;
   d[s]
=0;
   
for (i=1;i<n;i++)
     
{
        minc
=maxint;
        
for (j=0;j<n;j++)
        
{
          
if ((mark[j]==0)&&(minc>=d[j]))  // 若點j未被求解,且距源的長度有窮
          {minc=d[j];w=j;}
        }

          
        mark[w]
=1;    // 歸并該點
        for (j=0;j<n;j++)
        
if (mark[j]==0&&d[j]>d[w]+g[w][j])
           
{
             d[j]
=d[w]+g[w][j];
            
             path[j]
=w;
           }

     }

     
return d[t];
}