解决问题:
赋权有向图或者无向图的单源最短路径&最小花费问题
算法思想:
广搜的思想
采用贪心,声明一个数组dis来保存源点到各个顶点的最短路距离、一个集合用来保存已经找到的最短路的顶点
开辟空间:
dis[i] 表示源点到某点(i)的最短距离
cos[i] 表示源点到某点 (i)的最少花费
vis[i] 表示某点是否走过
二维数组mp和cost是用来存读入图的数据
可以用初始函数初始数组:
算法编写:
main函数里:
初始读入数据,一个mp用来存图,一个cost用来存每条边的权值
DIJ函数里:
dis用来保存源点到各个顶点的最短距离、c用来保存源点到各个点的花费
遍历剩余的点
注意for循环只用循环n-1次即可
n-2个循环里面有两个n次循环
第一次循环用来找到源点到某点距离的最小值,存下标v和dis
中间如果这个下标没有找到,那就返回呗。
第二次循环用来更新dis里的值,此时已经是那个v点往后的点了
整个dij走完一定记得return 1