Skip to content

Commit b1f422e

Browse files
committed
785 染色问题
1 parent 6b70b4f commit b1f422e

File tree

3 files changed

+67
-1
lines changed

3 files changed

+67
-1
lines changed

README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ Leetcode刷题记录
1414
+ No.46 [python](python/46.py)
1515
+ No.126 [cpp](cpp/126.cpp) [python](python/126.py)
1616
+ No.543 [cpp](cpp/543.cpp) [python](python/543.py)
17+
+ No.785 [cpp-dfs](cpp/785.cpp) [cpp-bfs](cpp/785-bfs.cpp) **二分图染色问题**
1718

1819
### 并查集
1920

@@ -65,7 +66,7 @@ Leetcode刷题记录
6566
+ No.63 [cpp](cpp/63.cpp) [python](python/63.py)
6667
+ No.70 [cpp](cpp/70.cpp) [python](python/70.py) easy
6768
+ No.53 [cpp](cpp/53.cpp) [python](python/53.py)
68-
+ No.96 [cpp](cpp/96.cpp) [python](python/96.py) [java](java\Problem96.java) easy
69+
+ No.96 [cpp](cpp/96.cpp) [python](python/96.py) easy
6970
+ No.120 [cpp](cpp/120.cpp) [python](python/120.py)
7071
+ No.837 [cpp](cpp/837.cpp) [python](python/837.py)
7172
+ No.126 [cpp](cpp/126.cpp) [python](python/126.py)

cpp/785-bfs.cpp

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
class Solution {
4+
public:
5+
bool isBipartite(vector<vector<int>>& graph) {
6+
size_t n = graph.size();
7+
vector<int> visited(n, 0);
8+
for (int i = 0; i < n; ++i) {
9+
if (visited[i] == 0 && !bfs(graph, visited, i)) return false;
10+
}
11+
return true;
12+
}
13+
bool bfs(vector<vector<int>>& graph, vector<int> &visited, int begin_node) {
14+
queue<int> q;
15+
q.push(begin_node);
16+
visited[begin_node] = 1;
17+
while (!q.empty()) {
18+
int node = q.front();
19+
q.pop();
20+
int color = visited[node];
21+
for (int node_i: graph[node]) {
22+
if (visited[node_i] != 0) {
23+
if (visited[node_i] != -color) return false;
24+
} else {
25+
visited[node_i] = -color;
26+
q.push(node_i);
27+
}
28+
}
29+
}
30+
return true;
31+
}
32+
};

cpp/785.cpp

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
class Solution {
5+
public:
6+
bool isBipartite(vector<vector<int>>& graph) {
7+
int n = graph.size();
8+
vector<int> visited(n, 0);
9+
for (int i = 0; i < n; ++i) {
10+
if (visited[i] == 0 && !dfs(graph, visited, 1, i) ) {
11+
return false;
12+
}
13+
}
14+
return true;
15+
}
16+
bool dfs(vector<vector<int>>& graph, vector<int> &visited, int color, int node) {
17+
if (visited[node] != 0) {// 被访问过 {
18+
return visited[node] == color;
19+
}
20+
visited[node] = color;
21+
for (int node_i : graph[node])
22+
if (!dfs(graph, visited, -color, node_i)) return false;
23+
return true;
24+
}
25+
};
26+
27+
int main(int argc, char const *argv[])
28+
{
29+
Solution s;
30+
vector<vector<int>> vec = {{1,3},{0,2},{1,3},{0,2}};
31+
printf("%d\n", s.isBipartite(vec));
32+
return 0;
33+
}

0 commit comments

Comments
 (0)