当前位置: 首页 > news >正文

Qwen模型 LeetCode 2608. 图中的最短环 Java实现

哎呀,2608. 图中的最短环!这题可有意思了~我第一次做时也卡了好一会儿,后来发现用 **BFS 枚举每条边 + 临时删除** 的思路特别清爽!

### 🌟 核心思想:
- 对于每一条边 `(u, v)`,我们**暂时把它删掉**,然后从 `u` 出发 BFS 找到 `v` 的最短路径。
- 如果能找到,那么 `这条路径长度 + 1`(加回那条边)就是一个环的长度!
- 遍历所有边,取最小值就行啦~

> 💡 为什么不用 DFS?因为我们要**最短环**,BFS 天然保证第一次遇到就是最短路径!

---

### ✅ Java 实现(清晰 + 高效)

```java
import java.util.*;

public class Solution {
public int findShortestCycle(int n, int[][] edges) {
// 建图:邻接表
List<List<Integer>> graph = new ArrayList<>();
for (int i = 0; i < n; i++) {
graph.add(new ArrayList<>());
}
for (int[] e : edges) {
graph.get(e[0]).add(e[1]);
graph.get(e[1]).add(e[0]);
}

int minCycle = Integer.MAX_VALUE;

// 枚举每一条边
for (int[] edge : edges) {
int u = edge[0], v = edge[1];

// 临时删除边 (u, v)
graph.get(u).remove(Integer.valueOf(v));
graph.get(v).remove(Integer.valueOf(u));

// 从 u 开始 BFS,找 v 的最短距离
int dist = bfs(u, v, graph, n);

if (dist != -1) {
minCycle = Math.min(minCycle, dist + 1); // +1 是加回被删的边
}

// 恢复边(其实也可以不恢复,但为了逻辑清晰)
graph.get(u).add(v);
graph.get(v).add(u);
}

return minCycle == Integer.MAX_VALUE ? -1 : minCycle;
}

// BFS 返回从 start 到 target 的最短距离,找不到返回 -1
private int bfs(int start, int target, List<List<Integer>> graph, int n) {
Queue<Integer> queue = new LinkedList<>();
int[] dist = new int[n];
Arrays.fill(dist, -1);

queue.offer(start);
dist[start] = 0;

while (!queue.isEmpty()) {
int u = queue.poll();
if (u == target) {
return dist[u];
}
for (int neighbor : graph.get(u)) {
if (dist[neighbor] == -1) {
dist[neighbor] = dist[u] + 1;
queue.offer(neighbor);
}
}
}
return -1;
}
}
```

---

### ⚠️ 注意细节

1. **删除边要用 `Integer.valueOf(v)`**
因为 `List.remove(int index)` 和 `List.remove(Object o)` 重载不同!直接传 `v` 会被当成下标,必须包装成 `Integer`。

2. **时间复杂度**
- 边数最多 1000(题目限制),每次 BFS 最多 O(n + m) ≈ O(1000)
- 总体 O(m × (n + m)) ≈ 1e6,完全 OK!

3. **为什么能保证是最短环?**
因为我们枚举的是**环上的一条边**,剩下的部分用 BFS 找最短路径,所以整体就是包含这条边的最短环。遍历所有边,自然得到全局最短环。

---

### 🧪 举个例子

比如图:`0—1—2—0`(三角形)
- 枚举边 (0,1):删掉后,BFS 从 0 到 1 的路径是 `0→2→1`,长度 2 → 环长 = 3
- 其他边同理,最终答案就是 3 ✅

---

我超爱这种“暴力但聪明”的解法!虽然看起来是枚举,但利用了 BFS 的最优性,既简单又可靠~

你现在是在刷图论专题吗?这题和“无向图最小环”、“检测环”那些题都是一家子~要不要我再给你讲讲怎么用 Floyd 找最小环?(虽然这题用不上,但面试可能会问😉)

http://www.jsqmd.com/news/880382/

相关文章:

  • 2026年AI写作辅助软件实测排行,哪款真正适合写论文?
  • Qt应用AES/RSA加密监控:Frida+对象生命周期追踪框架
  • 2026年5月新消息:青岛吸塑厂选哪家?深度解析专业定制吸塑厂青岛政浩诚 - 2026年企业推荐榜
  • 雷电模拟器安卓7+抓包失败原因与Burp证书配置方案
  • 2026汽车行业PROFINET步进驱动器评测解析:中空旋转平台、五相步进马达、光栅尺闭环步进驱动器、前十步进电机品牌选择指南 - 优质品牌商家
  • 为什么92%的AI生成BP被秒拒?ChatGPT商业计划书写作的5大合规红线,今天不看明天就踩坑
  • Nuxeo平台安全加固实践指南:认证强化与权限最小化
  • Web渗透信息收集实战:从被动侦察到精准测绘
  • 化工高危车间无感定位 违规逗留越界行为智能预警
  • 【DeepSeek边缘部署实战指南】:20年架构师亲授5大避坑法则与3步极简上线法
  • DeepSeek LeetCode 2608. 图中的最短环 C语言实现
  • 好用的AI写作辅助软件推荐(2026最新版)
  • 好用还专业!2026 降AIGC平台测评:最新工具推荐与对比分析
  • DeepSeek LeetCode 2612. 最少翻转操作数 JavaScript实现
  • 加密流量分析:从TLS握手明文到行为建模的实战指南
  • 空基视觉无感定位组网 适配矿井无信号区域人员管控
  • Veo视频生成引擎深度集成方案(官方未公开的Webhook级联协议与跨平台帧同步技术首次披露)
  • 评测全网10款主流降AI率工具:帮你锁定真正好用靠谱的一款
  • 全域视频跨镜智能追踪 煤矿作业人员全程轨迹溯源
  • 揭秘顶级AI画师不愿透露的ChatGPT绘画提示词生成底层逻辑:基于LLM注意力机制的Prompt语法树建模
  • 安卓13真机+VMOSPro双环境HttpCanary抓包实战指南
  • DeepSeek LeetCode 2617. 网格图中最少访问的格子数 Java实现
  • ChatGPT+B站策划=降维打击?不,92%创作者正在错误使用——来自217个失败案例的反模式图谱(含3个致命Prompt陷阱)
  • 上位机知识篇---部署过程小知识点(1)
  • LangGraph 状态存储优化:处理大规模多智能体数据的高效方案
  • Python基础篇:闭包、装饰器wrapper
  • DeepSeek LeetCode 2617. 网格图中最少访问的格子数 TypeScript实现
  • 上位机使用篇---Jetson的烧写和备份
  • java类继承理解
  • 全球首份Gemini代码生成「生产就绪度」白皮书(含27项SRE级验收标准+自动化检测脚本开源)