P3916 图的遍历

Posted karshey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P3916 图的遍历相关的知识,希望对你有一定的参考价值。

原题:点我
在这里插入图片描述
代码:

//反向建图 
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int ans[N];
vector<int>gra[N];

void dfs(int a,int b)
{
	if(ans[a]) return;//已经有数字了
	
	ans[a]=b;//最差都是自己
	for(int i=0;i<gra[a].size();i++)
	{
		dfs(gra[a][i],b);//a-->b,i-->a
	 } 
}

int main()
{
	int n,m,a,b;
	cin>>n>>m;
	for(int i=0;i<m;i++)
	{
		cin>>a>>b;//a-->b
		gra[b].push_back(a);//到b的有a 
	}
	
	for(int i=n;i>=1;i--) dfs(i,i);
	for(int i=1;i<=n;i++)
	{
		if(i!=1) cout<<" ";
		cout<<ans[i];
	}
	return 0;
}

以上是关于P3916 图的遍历的主要内容,如果未能解决你的问题,请参考以下文章

图的遍历(某谷P3916)

ACM入门之图论习题

求图的深度优先遍历程序 c语言版

图的深度优先遍历DFS和广度优先遍历BFS(邻接矩阵存储)超详细完整代码进阶版

22-1图的遍历的源代码

数据结构—图邻接表存储基本运算算法图的遍历