迪杰斯特拉算法

作者:silence、2012年5月17日

本文参考:Google,数据结构(C语言)
本人声明:个人原创,转载请注明出处。

一 简介

   无向图中求单源到其他顶点的最短距离

二 重点


   通过对路径的迭代更新,求出最小值

#include <cstdlib>
#include <iostream>
#define M 65535
using namespace std;
//单源到其他点的最短路径 
void dijkstra(int g[][6],int s,int n)
{
   int flag[n];
   int dis[n];
   for(int i = 0;i < n;i++)
   {
   dis[i] = g[s][i];
   flag[i] = 0;        
   }
   
   flag[s] = 1;
   int count = 0;
   while(count++ < n-1)
   {
    int min = 65535;
    int select;
    for(int i = 0; i< n;i++)
    {
    if((flag[i]==0)&&(dis[i]<min))
     {
      select = i;
      min = dis[i];
     }        
    }
   flag[select] = 1;
   for(int i = 0;i< n ;i++)
   {
   //更新所有经过select点的最小值 
   if((flag[i]==0)&&(dis[i]>dis[select]+g[select][i]))
   dis[i] = dis[select] + g[select][i];        
   }
                 
   }
    for(int i = 0;i<n;i++)
     {
             cout<<"V"<<s<<"-->"<<"V"<<i<<": "<<dis[i]<<endl;
             
             }    
}


int main(int argc, char *argv[])
{ int array[6][6] = {{0,20,15,M,M,M},
                       {2,0,4,M,10,30},
                       {M,M,0,M,M,10},
                       {M,M,M,0,M,M},
                       {M,M,M,15,0,10},
                       {M,M,M,4,M,0}};
           dijkstra(array,0,6);      
    system("PAUSE");
    return EXIT_SUCCESS;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香菜+

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值