Skip to content

[pull] master from youngyangyang04:master #3

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions problems/0042.接雨水.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@

示例 1:

![](https://code-thinking-1253855093.cos.ap-guangzhou.myqcloud.com/pics/20210713205038.png)

![image](https://file1.kamacoder.com/i/algo/2025-07-04_12-06-59.jpg)
* 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
* 输出:6
* 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
Expand Down
1 change: 0 additions & 1 deletion problems/kamacoder/0044.开发商购买土地.md
Original file line number Diff line number Diff line change
Expand Up @@ -613,4 +613,3 @@ func main() {
}
```

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
1 change: 0 additions & 1 deletion problems/kamacoder/0047.参会dijkstra堆.md
Original file line number Diff line number Diff line change
Expand Up @@ -927,4 +927,3 @@ func main() {

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
1 change: 0 additions & 1 deletion problems/kamacoder/0047.参会dijkstra朴素.md
Original file line number Diff line number Diff line change
Expand Up @@ -942,4 +942,3 @@ main()

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
1 change: 0 additions & 1 deletion problems/kamacoder/0053.寻宝-Kruskal.md
Original file line number Diff line number Diff line change
Expand Up @@ -760,4 +760,3 @@ int main()
}

```
<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
1 change: 0 additions & 1 deletion problems/kamacoder/0053.寻宝-prim.md
Original file line number Diff line number Diff line change
Expand Up @@ -757,4 +757,3 @@ main()

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
1 change: 0 additions & 1 deletion problems/kamacoder/0054.替换数字.md
Original file line number Diff line number Diff line change
Expand Up @@ -432,4 +432,3 @@ echo $s;

### Rust:

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
1 change: 0 additions & 1 deletion problems/kamacoder/0055.右旋字符串.md
Original file line number Diff line number Diff line change
Expand Up @@ -409,4 +409,3 @@ echo $s;

### Rust:

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
1 change: 0 additions & 1 deletion problems/kamacoder/0058.区间和.md
Original file line number Diff line number Diff line change
Expand Up @@ -408,4 +408,3 @@ func main() {
}
```

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
1 change: 0 additions & 1 deletion problems/kamacoder/0094.城市间货物运输I-SPFA.md
Original file line number Diff line number Diff line change
Expand Up @@ -536,4 +536,3 @@ main()



<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
1 change: 0 additions & 1 deletion problems/kamacoder/0094.城市间货物运输I.md
Original file line number Diff line number Diff line change
Expand Up @@ -538,4 +538,3 @@ main()

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
101 changes: 97 additions & 4 deletions problems/kamacoder/0095.城市间货物运输II.md
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,6 @@ struct Edge { //邻接表
Edge(int t, int w): to(t), val(w) {} // 构造函数
};


int main() {
int n, m, p1, p2, val;
cin >> n >> m;
Expand Down Expand Up @@ -229,16 +228,111 @@ int main() {
}
}
}

if (flag) cout << "circle" << endl;
else if (minDist[end] == INT_MAX) {
cout << "unconnected" << endl;
} else {
cout << minDist[end] << endl;
}

}
```

以上代码看上去没问题,但提交之后会发现报错了,为什么呢?

例如这组数据:

```
4 6
1 4 3
1 2 1
1 3 1
3 2 -2
2 4 1
3 4 0
```

如图:

![](https://file1.kamacoder.com/i/algo/2025-06-03_16-12-41.jpg)

上面代码在执行的过程中,节点4 已经出队列了,但 计算入度会反复计算 节点4的入度,导致 误判 该图有环。

我们需要记录哪些节点已经出队列了,哪些节点在队列里面,对于已经出队列的节点不用统计入度,以下为优化后的代码:

```CPP
#include <iostream>
#include <vector>
#include <queue>
#include <list>
#include <climits>
using namespace std;

struct Edge { //邻接表
int to; // 链接的节点
int val; // 边的权重

Edge(int t, int w): to(t), val(w) {} // 构造函数
};


int main() {
int n, m, p1, p2, val;
cin >> n >> m;

vector<list<Edge>> grid(n + 1); // 邻接表

// 将所有边保存起来
for(int i = 0; i < m; i++){
cin >> p1 >> p2 >> val;
// p1 指向 p2,权值为 val
grid[p1].push_back(Edge(p2, val));
}
int start = 1; // 起点
int end = n; // 终点

vector<int> minDist(n + 1 , INT_MAX);
minDist[start] = 0;

queue<int> que;
que.push(start); // 队列里放入起点

vector<int> count(n+1, 0); // 记录节点加入队列几次
count[start]++;
vector<bool> inQueue(n+1, false); // 记录节点是否在队列中

bool flag = false;
while (!que.empty()) {

int node = que.front(); que.pop();
inQueue[node] = false; // 节点出队

for (Edge edge : grid[node]) {
int from = node;
int to = edge.to;
int value = edge.val;
if (minDist[to] > minDist[from] + value) { // 开始松弛
minDist[to] = minDist[from] + value;
if (!inQueue[to]) { // 避免重复入队
que.push(to);
inQueue[to] = true;
count[to]++;
if (count[to] == n) {// 如果加入队列次数超过 n-1次 就说明该图与负权回路
flag = true;
while (!que.empty()) que.pop();
break;
}
}
}
}
}

if (flag) cout << "circle" << endl;
else if (minDist[end] == INT_MAX) {
cout << "unconnected" << endl;
} else {
cout << minDist[end] << endl;
}
}
```

## 其他语言版本
Expand Down Expand Up @@ -456,4 +550,3 @@ if __name__ == "__main__":

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
1 change: 0 additions & 1 deletion problems/kamacoder/0096.城市间货物运输III.md
Original file line number Diff line number Diff line change
Expand Up @@ -922,4 +922,3 @@ if __name__ == "__main__":

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
1 change: 0 additions & 1 deletion problems/kamacoder/0097.小明逛公园.md
Original file line number Diff line number Diff line change
Expand Up @@ -574,4 +574,3 @@ if __name__ == '__main__':

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
2 changes: 1 addition & 1 deletion problems/kamacoder/0098.所有可达路径.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
* 1 <= N <= 100
* 1 <= M <= 500

**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[所有可达路径](https://www.bilibili.com/video/BV1VePeepEpP),相信结合视频再看本篇题解,更有助于大家对本题的理解**。

## 插曲

Expand Down Expand Up @@ -887,4 +888,3 @@ async function dfs(graph, x, n) {



<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
3 changes: 2 additions & 1 deletion problems/kamacoder/0099.岛屿的数量广搜.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@

## 思路

**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[图论:广搜有陷阱啊!! | 广度优先搜索 | 卡码网:99.岛屿数量](https://www.bilibili.com/video/BV18PRGYcEiB/),相信结合视频再看本篇题解,更有助于大家对本题的理解**。

注意题目中每座岛屿只能由**水平方向和/或竖直方向上**相邻的陆地连接形成。

也就是说斜角度链接是不算了, 例如示例二,是三个岛屿,如图:
Expand Down Expand Up @@ -557,4 +559,3 @@ object Solution {

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
3 changes: 2 additions & 1 deletion problems/kamacoder/0099.岛屿的数量深搜.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@

## 思路

**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[图论:来用深搜解决一道题目,两种深搜写法,你掉坑了吗? | 卡码网:99.岛屿数量](https://www.bilibili.com/video/BV18PRGYcEiB/),相信结合视频再看本篇题解,更有助于大家对本题的理解**。

注意题目中每座岛屿只能由**水平方向和/或竖直方向上**相邻的陆地连接形成。

也就是说斜角度链接是不算了, 例如示例二,是三个岛屿,如图:
Expand Down Expand Up @@ -459,4 +461,3 @@ object Solution {

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
3 changes: 2 additions & 1 deletion problems/kamacoder/0100.岛屿的最大面积.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@

## 思路

**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[图论:深搜也有陷阱啊!! | 深搜优先搜索 | 卡码网:100.岛屿的最大面积](https://www.bilibili.com/video/BV1FzoyY5EXH),相信结合视频再看本篇题解,更有助于大家对本题的理解**。

注意题目中每座岛屿只能由**水平方向和/或竖直方向上**相邻的陆地连接形成。

也就是说斜角度链接是不算了, 例如示例二,是三个岛屿,如图:
Expand Down Expand Up @@ -890,4 +892,3 @@ main();

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
3 changes: 2 additions & 1 deletion problems/kamacoder/0101.孤岛的总面积.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@

## 思路

**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[图论:岛屿问题再出新花样 | 深搜优先搜索 | 卡码网:101.孤岛总面积](https://www.bilibili.com/video/BV1mmZJYRESc),相信结合视频再看本篇题解,更有助于大家对本题的理解**。

本题使用dfs,bfs,并查集都是可以的。

本题要求找到不靠边的陆地面积,那么我们只要从周边找到陆地然后 通过 dfs或者bfs 将周边靠陆地且相邻的陆地都变成海洋,然后再去重新遍历地图 统计此时还剩下的陆地就可以了。
Expand Down Expand Up @@ -700,4 +702,3 @@ const bfs = (graph, x, y) => {

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
3 changes: 2 additions & 1 deletion problems/kamacoder/0102.沉没孤岛.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@

## 思路

**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[图论:岛屿问题也需要逆向思考 | 深搜优先搜索DFS | 卡码网:102.沉没孤岛](https://www.bilibili.com/video/BV1fjdWYyEGu),相信结合视频再看本篇题解,更有助于大家对本题的理解**。

这道题目和[0101.孤岛的总面积](https://kamacoder.com/problempage.php?pid=1173)正好反过来了,[0101.孤岛的总面积](https://kamacoder.com/problempage.php?pid=1173)是求 地图中间的空格数,而本题是要把地图中间的 1 都改成 0 。

那么两题在思路上也是差不多的。
Expand Down Expand Up @@ -503,4 +505,3 @@ const bfs = (graph, x, y) => {

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
3 changes: 2 additions & 1 deletion problems/kamacoder/0103.水流问题.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@

## 思路

**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[图论:水流向何方? | 深搜优先搜索DFS| 广度优先搜索BFS | 卡码网:103.水流问题](https://www.bilibili.com/video/BV1WNoEYrEio),相信结合视频再看本篇题解,更有助于大家对本题的理解**。

一个比较直白的想法,其实就是 遍历每个点,然后看这个点 能不能同时到达第一组边界和第二组边界。

至于遍历方式,可以用dfs,也可以用bfs,以下用dfs来举例。
Expand Down Expand Up @@ -854,4 +856,3 @@ const isResult = (x, y) => {



<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
3 changes: 2 additions & 1 deletion problems/kamacoder/0104.建造最大岛屿.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@

## 思路

**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[图论:岛屿问题上难度了! |深搜优先搜索DFS | 广度优先搜索BFS | 卡码网:104.建造最大岛屿](https://www.bilibili.com/video/BV1Dn5CzZEw1/),相信结合视频再看本篇题解,更有助于大家对本题的理解**。

本题的一个暴力想法,应该是遍历地图尝试 将每一个 0 改成1,然后去搜索地图中的最大的岛屿面积。

计算地图的最大面积:遍历地图 + 深搜岛屿,时间复杂度为 n * n。
Expand Down Expand Up @@ -663,4 +665,3 @@ const dfs = (graph, visited, x, y, mark) => {

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
5 changes: 3 additions & 2 deletions problems/kamacoder/0105.有向图的完全可达性.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

<p align="center"><strong><a href="./qita/join.md">参与本项目</a>,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们受益!</strong></p>

# 105.有向图的完全可达性
# 105.有向图的完全联通

[卡码网题目链接(ACM模式)](https://kamacoder.com/problempage.php?pid=1177)

Expand Down Expand Up @@ -44,6 +44,8 @@

## 思路

**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[图论:这次我们能到达有向图的所有节点吗?| 深度优先搜索 | 卡码网:105. 有向图的完全联通](https://www.bilibili.com/video/BV1QRJ6ziEvJ),相信结合视频再看本篇题解,更有助于大家对本题的理解**。

本题给我们是一个有向图, 意识到这是有向图很重要!

接下来我们再画一个图,从图里可以直观看出来,节点6 是 不能到达节点1 的
Expand Down Expand Up @@ -553,4 +555,3 @@ rl.on('close',()=>{

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
3 changes: 2 additions & 1 deletion problems/kamacoder/0106.岛屿的周长.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@

## 思路

**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[图论:这次的岛屿问题有点简单了。。 卡码网:106.岛屿的周长](https://www.bilibili.com/video/BV13fjczSEyV),相信结合视频再看本篇题解,更有助于大家对本题的理解**。

岛屿问题最容易让人想到BFS或者DFS,但本题确实还用不上。

为了避免大家惯性思维,所以给大家安排了这道题目。
Expand Down Expand Up @@ -359,4 +361,3 @@ func parseLine(line string, count int) []int {

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
1 change: 0 additions & 1 deletion problems/kamacoder/0107.寻找存在的路径.md
Original file line number Diff line number Diff line change
Expand Up @@ -422,4 +422,3 @@ const isSame = (u, v) => {

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
1 change: 0 additions & 1 deletion problems/kamacoder/0108.冗余连接.md
Original file line number Diff line number Diff line change
Expand Up @@ -376,4 +376,3 @@ const isSame = (u, v) => {

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
1 change: 0 additions & 1 deletion problems/kamacoder/0109.冗余连接II.md
Original file line number Diff line number Diff line change
Expand Up @@ -596,4 +596,3 @@ const getRemoveEdge = (edges) => {

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
3 changes: 2 additions & 1 deletion problems/kamacoder/0110.字符串接龙.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ yhn

## 思路

**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[图论:朴实无华的广搜这么难? | 广度优先搜索 | 卡码网:110.字符串接龙](https://www.bilibili.com/video/BV1QEEizDEC4),相信结合视频再看本篇题解,更有助于大家对本题的理解**。

以示例1为例,从这个图中可以看出 abc 到 def的路线 不止一条,但最短的一条路径上是4个节点。

![](https://file1.kamacoder.com/i/algo/20250317105155.png)
Expand Down Expand Up @@ -360,4 +362,3 @@ const init = async () => {

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
1 change: 0 additions & 1 deletion problems/kamacoder/0117.软件构建.md
Original file line number Diff line number Diff line change
Expand Up @@ -539,4 +539,3 @@ const init = async () => {

### C

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
1 change: 0 additions & 1 deletion problems/kamacoder/0126.骑士的攻击astar.md
Original file line number Diff line number Diff line change
Expand Up @@ -684,4 +684,3 @@ int main() {



<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
1 change: 0 additions & 1 deletion problems/kamacoder/图论为什么用ACM模式.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,4 +91,3 @@ cout << result[result.size() - 1];
等大家将图论刷完,就会感受到我的良苦用心。加油


<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
1 change: 0 additions & 1 deletion problems/kamacoder/图论并查集理论基础.md
Original file line number Diff line number Diff line change
Expand Up @@ -454,4 +454,3 @@ void join(int u, int v) {

敬请期待 并查集题目精讲系列。

<div align="center"><a href="https://www.nowcoder.com/link/wx_sqlcarl199" target="_blank"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20220416223343.png" width="1000"/></a></div>
Loading