博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1344:【例4-4】最小花费 dijkstra
阅读量:5140 次
发布时间:2019-06-13

本文共 1004 字,大约阅读时间需要 3 分钟。

 

Dijkstra

(1)a [ i ] [ j ] 存转账率(。。转后所得率。。)

(2)dis [ i ] 也就是 a [ 起点 ] [ i ] 

(3)f [ i ] 判断是否已经拓展过

(4)前驱结点 k

 

 

PS:ans * a[x][y]=100

       即 ans=100 / a[x][y]

代码:

#include
#include
#include
#include
#include
#include
using namespace std;double a[2001][2001],dis[2001],minn;int f[2001],n,m,k,x,y;void read(){ int xx,yy,zz; scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { scanf("%d%d",&xx,&yy); scanf("%lf",&a[xx][yy]); a[xx][yy]=(100-a[xx][yy])/100; a[yy][xx]=a[xx][yy]; } cin>>x>>y;}void dijkstra(int x){ for(int i=1;i<=n;i++) dis[i]=a[x][i]; dis[x]=1; f[x]=1; for(int i=1;i<=n-1;i++) { minn=0; for(int j=1;j<=n;j++) if(f[j]==0&&dis[j]>minn) { k=j; minn=dis[j]; } f[k]=1; if(k==y) break; for(int j=1;j<=n;j++) if(f[j]==0&&dis[k]*a[k][j]>dis[j]) dis[j]=dis[k]*a[k][j]; }}int main(){ read(); dijkstra(x); printf("%.8lf",100/dis[y]); return 0; }

 

转载于:https://www.cnblogs.com/xiaoyezi-wink/p/10745904.html

你可能感兴趣的文章
TCP的三次握手(建立连接)和四次挥手(关闭连接)
查看>>
第五次作业(最大公约数,最小公倍数)
查看>>
C++两水杯量出所需水量的小算法
查看>>
[面试真题] LeetCode:Same Tree
查看>>
iOS:quartz2D绘图
查看>>
第八周作业
查看>>
约数函数
查看>>
语言基础思维导图
查看>>
mysql自动添加时间的方法
查看>>
使用Python编的猜数字小游戏
查看>>
Java 日期时间
查看>>
UVa 540 Team Queue 【STL】
查看>>
BaseAdapter
查看>>
第一章计算机网络和因特网-day01
查看>>
基于ubuntu的docker安装
查看>>
【模板】文艺平衡树(Splay)
查看>>
DOS批量拷贝本地目录到远程主机(定时执行)
查看>>
vue基于webpack说明
查看>>
React 回忆录(四)React 中的状态管理
查看>>
1076 Forwards on Weibo (30)(30 分)
查看>>