算法训练营|图论第一天 98. 所有可达路径

题目:所有可到达路径

题目链接:

98. 所有可达路径 (kamacoder.com)

解题思路:

邻接矩阵,注意没有result == -1时候特判

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
vector<vector<int>>result;
vector<int>path;
void dfs(vector<vector<int>>grid, int x, int n) {
	if (x == n) {
		result.push_back(path);
		return;
	}
	for (int i = 1; i <= n; i++) {
		if (grid[x][i] == 1) {
			path.push_back(i);
			dfs(grid, i, n);
			path.pop_back();
		}
	}
}
int main() {
	int n, m;
	cin >> n >> m;
	vector<vector<int>>grid(n + 1, vector<int>(n + 1, 0));
	while (m--) {
		int s, t;
		cin >> s >> t;
		grid[s][t] = 1;
	}
	path.push_back(1);
	dfs(grid, 1, n);
	if (result.size() == 0) cout << -1 << endl;
	for (int i = 0; i < result.size(); i++) {
		for (int j = 0; j < result[i].size() - 1; j++) {
			cout << result[i][j] << ' ';
		}
		cout << result[i][result[i].size() - 1]<<endl;
	}
}

邻接表的写法:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
vector<vector<int>>result;
vector<int>path;
void dfs(vector<list<int>>grid, int x, int n) {
	if (x == n) {
		result.push_back(path);
		return;
	}
	for (auto i : grid[x]) {
		path.push_back(i);
		dfs(grid, i, n);
		path.pop_back();
	}
}
int main() {
	int n, m;
	cin >> n >> m;
	vector<list<int>>grid(n + 1);
	while (m--) {
		int s, t;
		cin >> s >> t;
		grid[s].push_back(t);
	}
	path.push_back(1);
	dfs(grid, 1, n);
	if (result.size() == 0) {
		cout << -1 << endl;
	}
	for (auto path : result) {
		for (int i = 0; i < path.size() - 1; i++) {
			cout << path[i] << ' ';
		}
		cout << path[path.size() - 1] << endl;
	}
	return 0;
}
相关推荐
_殊途1 小时前
《Java HashMap底层原理全解析(源码+性能+面试)》
java·数据结构·算法
珊瑚里的鱼5 小时前
LeetCode 692题解 | 前K个高频单词
开发语言·c++·算法·leetcode·职场和发展·学习方法
秋说6 小时前
【PTA数据结构 | C语言版】顺序队列的3个操作
c语言·数据结构·算法
lifallen6 小时前
Kafka 时间轮深度解析:如何O(1)处理定时任务
java·数据结构·分布式·后端·算法·kafka
liupenglove6 小时前
自动驾驶数据仓库:时间片合并算法。
大数据·数据仓库·算法·elasticsearch·自动驾驶
python_tty7 小时前
排序算法(二):插入排序
算法·排序算法
然我7 小时前
面试官:如何判断元素是否出现过?我:三种哈希方法任你选
前端·javascript·算法
F_D_Z8 小时前
【EM算法】三硬币模型
算法·机器学习·概率论·em算法·极大似然估计
秋说8 小时前
【PTA数据结构 | C语言版】字符串插入操作(不限长)
c语言·数据结构·算法
凌肖战9 小时前
力扣网编程135题:分发糖果(贪心算法)
算法·leetcode