class Solution {
public:
//思路:
//从1开始遍历,第一轮将与1直接相连的结点直接记录在list数组中
//然后遍历与1相连的数据,看与其直接相连的数据的距离+其与1的距离,是否小于list中的距离,如果小于,则更新list
int findShortestPath(int n, int m, vector<vector<int> >& graph) {
// write code here
int answer = -1;
auto temp = graph;
//存放距离1最近的距离
vector<int> list(501,-1) ;
//1到1的距离为0
list[1] = 0;
//记录1所能到达的点
deque<int> q;
q.push_back(1);
//q为空时,说明从1能走到的点全被遍历过了
while(!q.empty()){
int n = q.front();
q.pop_front();
//遍历所有路径,如果该路径的起点是当前点
//则先判断当前点1是否到达过, 如果没有到达,则直接记录1到当前路径终点的距离
// 如果达到过,则先比较,如果之前的路径中1到当前路径的终点更远,则更新1到当前路径终点的距离
for(auto node : temp){
if(node[0] == n){
if(list[node[1]] == -1){
list[node[1]] = list[n] + node[2];
q.push_back(node[1]);
}else if(list[node[1]] > list[n] + node[2]){
list[node[1]] = list[n] + node[2];
}
}
}
}
answer = list[n];
return answer;
}
};
欢迎各位大佬畅所欲言,I'm so vegetable
我感觉这个思路,在遍历temp时,会遍历很多遍历过的数据,这会浪费很多时间
但是我又怕删除后,会影响结果
比如,在走一条不是最佳的路径组合时,删除了其中一条路径段
然后在走最佳路径时,因为其中的路径段被删除了,从而得不到最佳路径了
求大佬指点orz

京公网安备 11010502036488号