`
题目
为了缓解「力扣嘉年华」期间的人流压力,组委会在活动期间开设了一些交通专线。path[i] = [a, b] 表示有一条从地点 a通往地点 b 的 单向 交通专线。
若存在一个地点,满足以下要求,我们则称之为 交通枢纽:
所有地点(除自身外)均有一条 单向 专线 直接 通往该地点;
该地点不存在任何 通往其他地点 的单向专线。
请返回交通专线的 交通枢纽。若不存在,则返回 -1。
注意:
对于任意一个地点,至少被一条专线连通。
示例
示例 1:
输入:path = [[0,1],[0,3],[1,3],[2,0],[2,3]]
输出:3
解释:如下图所示:
地点 0,1,2 各有一条通往地点 3 的交通专线,
且地点 3 不存在任何通往其他地点的交通专线。
示例 2:
输入:path = [[0,3],[1,0],[1,3],[2,0],[3,0],[3,2]]
输出:-1
解释:如下图所示:不存在满足 交通枢纽 的地点。
我的c++题解
class Solution {
public:
int transportationHub(vector<vector<int>> &path) {
int len = path.size();
map<int, vector<int>> p;
for (int i = 0; i < len; ++i) {
p[path[i][0]].push_back(path[i][1]);
}
for (int i = 0; i < len; ++i) {
int flag = 1;
int f2 = 0;
if (i != 0 && path[i][1] == path[i - 1][1]) continue;
try {
p.at(path[i][1]);
} catch (const out_of_range &e) {
f2 = 1;
}
if (f2 == 0) continue;
else {
for (int j = 0; j < len; ++j) {
int tag1 = 0, tag2 = 0, tag = 0;
if (j == 0 || (j != 0 && path[j][0] != path[j - 1][0])) {
if (path[j][0] != path[i][1]) {
auto am = p[path[j][0]];
for (int k = 0; k < am.size(); ++k) {
if (am[k] == path[i][1]) {
tag1 = 1;
break;
}
}
} else tag1 = 1;
} else tag1 = 1;
if (j == 0 || (j != 0 && path[j][1] != path[j - 1][1])) {
if (path[j][1] != path[i][1]) {
auto am2 = p[path[j][1]];
for (int k = 0; k < am2.size(); ++k) {
if (am2[k] == path[i][1]) {
tag2 = 1;
break;
}
}
} else tag2 = 1;
} else tag2 = 1;
if (tag1 && tag2) tag = 1;
if (tag == 0) {
flag = 0;
break;
}
}
if (flag) return path[i][1];
}
}
return -1;
}
};