代码随想录算法训练营|图论内容复习
图论内容复习
稀疏图就是边少,稠密图就是边多
首先是图的存储有三种。分别是朴素存储,开辟一个\(n\times 2\)的数组,邻接矩阵和邻接表。邻接矩阵适合于稠密图,邻接表适合于稀疏图
深度优先搜索
深搜三部曲
-
确定递归函数和参数
-
确认终止条件
-
处理当前结点出发的路径
今天的程序有BUG
需要注意的是,在dfs的编写中,循环的终止条件是i <= n,这个一开始写成i < n了
点击查看代码
#include<iostream>
#include<vector>
using namespace std;
vector<vector<int>> result;
vector<int> path;
void dfs(vector<vector<int>> &graph, int x, int n) {
if (x == n) {
result.push_back(path);
return;
}
for (int i = 1; i <= n; i++) {
if (graph[x][i] == 1) {
path.push_back(i);
dfs(graph, i, n);
path.pop_back();
}
}
}
int main () {
// 图的存储
int s, t, N, M;
cin >> N >> M;
vector<vector<int>> graph(N + 1, vector<int>(N + 1, 0));
for (int i = 1; i <= M; i++) {
cin >> s >> t;
graph[s][t] = 1;
}
path.push_back(1);
dfs(graph, 1, N);
if (result.size() == 0) cout << -1 << endl;
for (const vector<int> s : result) {
for (int i = 0; i < s.size() - 1; i++) {
cout << s[i] << ' ';
}
cout << s[s.size() - 1] << endl;
}
}
99. 岛屿数量 今天写的又有bug,没找到
浙公网安备 33010602011771号