简单的讲就是,每次去掉一个入读为0的点,然后清除掉相关边(也就是在相关点的度数操作)
#include<iostream>
#include<algorithm>
#include<string.h>
#define mod 1e9+7
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
int G[505][505];
int indegree[505];
int main()
{
int n,m;
while(cin>>n>>m)
{
memset(G,0,sizeof(G));
memset(indegree,0,sizeof(indegree));
for(int i=0; i<m; i++)//建图
{
int x,y;
cin>>x>>y;
if(!G[x][y])
{
G[x][y]=1;
indegree[y]++;
}
}
for(int i=1; i<=n; i++)//遍历n次每次找出一个入度为0的节点
{
for(int j=1; j<=n; j++)
{
if(indegree[j]==0)
{
indegree[j]=-1;
if(i!=n)