思路:每次删去入度为零的点,与此同时,该点的每一个邻接点的入度减一,直至删去N个·点为止。注意break;
#include <iostream>
#include <memory.h>
#include <vector>
#include <queue>
#include <stdio.h>
#include <algorithm>
#include <unordered_set>
#include <set>
#define IN (1<<28)
using namespace std;
int V,A, Indegree[105];
bool Edage[105][105], IsDelete[105];
int main()
{
cin >> V >> A;
for( int i = 0; i <= V; i++ )
{
IsDelete[i] = false;
for( int j = 0; j <= V; j++ )
Edage[i][j] = false;
}
memset(Indegree, 0, sizeof(Indegree));
while( A-- )
{
int x,y;
cin >> x >> y;
Edage[x][y] = true;
Indegree[y]++;
}
for( int u = 1; u <= V; u++ )
{
for( int i = 1; i <= V; i++ )
{
if( !IsDelete[i] && Indegree[i] == 0 )
{
IsDelete[i] = true;
printf("v%d ", i);
for( int j = 1; j <= V; j++ )
{
if( Edage[i][j] )
{
Edage[i][j] = false;
Indegree[j]--;
}
}
break;
}
}
}
printf("\n");
return 0;
}