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