最短路径Dijkstra模板

算法思想:把所有的边分成两个集合A,B。集合A表示已经求出最短路径的点,不断扩展集合A,减少集合B。每一扩展就从结合B中找出到源点距离最短的点,加入到A。

dis[i]数组代表从出发点到j的距离;

map[i][j]代表i到j的距离;

调用函数是需要把map初始化成正无穷;

int dis[N],map[N][N];
int vis[N];
int Dijkstra() { int i,j,k=0; for(i=1;i<=n;i++) dis[i]=map[0][i];//初始化dis数组中的值 for(i=1;i<=n;i++) { int maxx=INF;//INF代表这正无穷 for(j=1;j<=n;j++) if(!vis[j]&&dis[j]<maxx) { k=j; maxx=dis[j];//从此循环中找到dis中最小的值并记住地址,为以后更新做准备; } if(k==0) break; vis[k]=1; for(j=1;j<=n;j++) if(!vis[j]&&dis[j]>dis[k]+map[k][j]) dis[j]=dis[k]+map[k][j];//更新dis数组(保持dis中的数最小) } return dis[1]; }

  

转载于:https://www.cnblogs.com/yuanbo123/p/5148208.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值