算法思路:dijkstra算法是把结点分为两个集合,一个是已经求出最短路的集合S,另一个就是其他结点的集合U,一开始S只有源结点V0,dijkstra算法就是不断的冲U集合中找出离中转点最近的点,然后把它加入到S集合中,加入后更新U集合的数据。
模拟一遍:一开始只有S只有v0源点,然后在U集合中找到了离v0最近的结点k,把k加入到S中,并把U中的结点数据更新。更新规则如下:if(dist[u]+map[u][j]<dist[j]) dist[j]=dist[u]+map[u][j] 其中dist[u]代表了v0到u的最短距离。map[u][j]表示u到j的距离。
模拟一遍:一开始只有S只有v0源点,然后在U集合中找到了离v0最近的结点k,把k加入到S中,并把U中的结点数据更新。更新规则如下:if(dist[u]+map[u][j]<dist[j]) dist[j]=dist[u]+map[u][j] 其中dist[u]代表了v0到u的最短距离。map[u][j]表示u到j的距离。
具体代码如下:
#include<bits/stdc++.h>
using namespace std;
#define maxn 100
#define inf 9999999
int ma[maxn][maxn];
int dist[maxn];
int n,m,v,e;
int ai,bi,num;
int s[maxn