单源最短路径,计算一个顶点到另一个顶点的最短路径
贪心思想,每次找距离最近的点,并且更新距离,更新公式:path[i]=min(path[i],path[index]+map[index][i])
long walk(vector<vector<long>>& map, long s, long t, int n){
vector<long> path = map[s];//s到其他点的距离
vector<bool> visit(n + 1, 0);
long index = s;
visit[s] = 1;
long inf = numeric_limits<long>::max();
while (index != t){//当没有到达目标点的时候
//寻找距离s最近的点
long m = inf;
for (int i = 1; i < n + 1; ++i){
if (m>path[i] && visit[i] == 0){
m = path[i];
index = i;
}
}
visit[index] = 1;
//更新s到其他点的距离
for (int i = 1; i < n + 1; ++i){
if (visit[i] == 0 && map[index][i] != inf){
path[i] = min(path[i], path[index] + map[index][i]);
}
}
}
return path[t];
}
int main(){
long n = 0;//顶点数目
long m = 0;//边的数目
long s = 0;//源顶点
long t = 0;//目标顶点
if (cin >> n >> m >> s >> t && (n>2 && m>1 && s !=

本文探讨了如何使用Dijkstra算法寻找图中一个顶点到其他所有顶点的最短路径。该算法基于贪心策略,每次选择当前未处理节点中距离源点最近的一个,更新其相邻节点的距离。
&spm=1001.2101.3001.5002&articleId=81903357&d=1&t=3&u=b159f71eb11a4626becbba705c87fa3b)
4万+

被折叠的 条评论
为什么被折叠?



