单源最短路径,计算一个顶点到另一个顶点的最短路径
贪心思想,每次找距离最近的点,并且更新距离,更新公式: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;