图的遍历

  • 链式前向星存图
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int h[100005],nx[100005],t[100005],cnt;
int ans[100005];
int read1()
{
	char cc=getchar();
	while(!(cc>=48&&cc<=57))
	{
		if(cc=='-')
		{
			break;
		}
		cc=getchar();
	}
	bool f=false;
	int s=0;
	if(cc=='-')
	{
		f=true;
	}
	else
	{
		s=cc-48;
	}
	while(1)
	{
		cc=getchar();
		if(cc>=48&&cc<=57)
		{
			s=s*10+cc-48;
		}
		else
		{
			break;
		}
	}
	if(f==true)
	{
		s=-s;
	}
	return s;
}
void add(int u,int v)
{
	cnt++;
	nx[cnt]=h[u];
	h[u]=cnt;
	t[cnt]=v;
}
void dfs(int n1)
{
	for(int i=h[n1];i!=0;i=nx[i])
	{
		int v=t[i];
		if(!ans[v])
		{
			ans[v]=ans[n1];
			dfs(v);
		}
	}
}
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int u,v;
		u=read1();
		v=read1();
		add(v,u);
	}
	for(int i=n;i>=1;i--)
	{
		if(!ans[i])
		{
			ans[i]=i;
			dfs(i);
		}
	}
	for(int i=1;i<n;i++)
	{
		printf("%d ",ans[i]);
	}
	cout<<ans[n]<<endl;
	return 0;
}
posted @ 2024-01-22 17:04  D06  阅读(2)  评论(0编辑  收藏  举报