2608. 图中的最短环
题目链接:2608. 图中的最短环
方法:BFS + 技巧
解题思路
- 环一定包含
数组中的某条边; - 遍历
数组,对于某一条边< >,以 为起点进行 搜索,禁止通过边< >(技巧)。在此种情况下若能搜到 ,说明存在环,且当前环的长度为 ,即在禁止通过边< >的情况下, -> ,因此可以设置一个 数组存储最短距离; - 然后取所有环的最小值。
代码
class Solution {
public:
int findShortestCycle(int n, vector<vector<int>>& edges) {
vector<vector<int>> adj(n);
for (auto &e : edges) {
int u = e[0], v = e[1];
adj[u].push_back(v);
adj[v].push_back(u);
}
int ans = INT_MAX;
for (auto &e : edges) {
int st = e[0], ed = e[1];
vector<int> dist(n), isVist(n);
queue<int> q;
q.push(st);
isVist[st] = 1;
while (!q.empty()) {
int u = q.front();
q.pop();
for (auto &v : adj[u]) {
if ((u == st && v == ed) || isVist[v]) continue;
dist[v] = dist[u] + 1;
q.push(v);
isVist[v] = 1;
}
}
if (dist[ed] != 0) ans = min(ans, dist[ed] + 1);
}
return ans == INT_MAX ? -1 : ans;
}
};
复杂度分析
时间复杂度:
空间复杂度:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】