社区讨论

DFS怎么写, 玄关!!!

P5318【深基18.例3】查找文献参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lzmi7vp5
此快照首次捕获于
2024/08/09 17:28
2 年前
此快照最后确认于
2024/08/09 18:38
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;

const int N = 1e3 + 10;

int cnt = 0, head[N];
int ans[N];
bool vis[N];

struct edge{
	int to;
	int nxt;
}e[N];

void add(int u, int v) {
	e[cnt].to = v;
	e[cnt].nxt = head[u];
	head[u] = cnt++;
}

void bfs(int r, int u){
	vis[u] = true;
	ans[r] = max(ans[r], u);
	for(int i = head[u] ; i != -1 ; i = e[i].nxt){
		int s = e[i].to;
		if(!vis[u])
			dfs(r, s);
	}
}

int main()
{
	int n, m;
	cin >> n >> m;
    memset(head, -1, 4 * (n + 1));
	for(int i = 1 ; i <= m ; i ++){
		int u, v; 
		cin >> u >> v;
		add(u, v);
	}
	
	for(int i = 1 ; i <= n ; i ++){
		memset(vis, false , 4 *(n + 1));
		bfs(i, i);
		cout << ans[i] << " ";
	}
	return 0;
}
蒟蒻想写链式前向星

回复

3 条回复,欢迎继续交流。

正在加载回复...