DFS怎么写, 玄关!!!
查看原帖
DFS怎么写, 玄关!!!
1061353
Q_ac楼主2024/8/9 17:25
#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;
}

蒟蒻想写链式前向星

2024/8/9 17:25
加载中...