题目描述:
给出一些公交路线,起点和终点,问从起点最少搭乘多少班公交能到达终点。
题意好像路线不循环走,看了题解发现是循环走。
思路:
bfs,起点站开始,可以搭乘的路线标记,路线的站点标记,对于新的站点能搭乘的新的路线标价。有点绕。
代码:
class Solution {
public:
int numBusesToDestination(vector<vector<int>>& routes, int S, int T) {
int n = routes.size();
map<int, vector<int>> stop2rout;
for (int i=0; i<n; ++i) {
for (int j=0; j<routes[i].size(); ++j) {
int stop = routes[i][j];
stop2rout[stop].push_back(i);
}
}
map<int, int> busstep;
map<int, int> stopstep;
queue<int> stopque;
stopque.push(S);
int step = 0;
while(!stopque.empty()) {
step++;
for (int size=stopque.size(); size>0; size--) {
int curstop = stopque.front();
stopque.pop();
if (curstop == T) return stopstep[curstop];
for (int i=0; i<stop2rout[curstop].size(); ++i) {
int rout = stop2rout[curstop][i];
if (busstep[rout]) continue;
busstep[rout] = step;
for (int j=0; j<routes[rout].size(); ++j) {
int nxtstop = routes[rout][j];
if (stopstep[nxtstop]) continue;
stopque.push(nxtstop);
stopstep[nxtstop] = step;
}
}
}
}
return -1;
}
};
终于还是放弃小米4选择了荣耀4的手环。
发现自己就是闲的。
不知道是不是要主动跟老师沟通一下让他安排个什么活干。