求助
查看原帖
求助
1364148
yangzimu0131楼主2024/8/2 10:21
#include<bits/stdc++.h>
using namespace std;
struct node{
	int to,next;
}a[100010];
int head[100010],in[100010],num[100010],temp,cnt;
priority_queue<int> q;
void init()
{
	temp=cnt=0;
	memset(a,0,sizeof(a));
	memset(in,0,sizeof(in));
	memset(head,0,sizeof(0));
	memset(num,0,sizeof(0));
}
void add(int u,int v)
{
	a[++cnt].to=v;
	a[cnt].next=head[u];
	head[u]=cnt;
}
int main()
{
	int T,n,m,u,v;
	cin>>T;
	while(T--)
	{
		init();
		cin>>n>>m;
		for(int i=1;i<=m;i++)
		{
			cin>>u>>v;
			add(v,u);
			in[u]++;
		}
		for(int i=1;i<=n;i++)
		{
			if(!in[i])
				q.push(i);
		}
		while(!q.empty())
		{
			u=q.top();
			q.pop();
			for(int i=head[u];i;i=a[i].next)//错误点
			{
				in[a[i].to]--; 
				if(in[a[i].to]==0)
					q.push(a[i].to); 
			}
			num[++temp]=u;
		}
		if(temp<n)
			cout<<"Impossible!\n";
		else{
			for(int i=n;i;i--)
				cout<<num[i]<<" ";
			cout<<"\n";
		}
	}
	return 0;
}

不知道为什么a[i].next==i导致了死循环

2024/8/2 10:21
加载中...