#include<stdio.h>
#include<string.h>
int map[100000][100000], bo[100000];
int main(){
int num,n,m;
scanf("%d",&num);
while(num--){
scanf("%d%d", &n, &m);
// Init.
memset(map, 0, sizeof(map));
memset(bo, 0, sizeof(bo));
int cnt = 0;
// Read.
for (int i = 0; i < m; i++){
int a, b;
scanf("%d%d", &a, &b);
map[b][a] = 1;
}
// Handle.
while (cnt < n){
for (int i = 1; i <= n; i++){
if (bo[i]) continue;
int ren=1;
for (int p = 1; p <= n; p++)
if (map[i][p])
ren=0;
if (ren){
if (cnt)
printf(" ");
printf("%d", i);
bo[i] = 1;
cnt++;
for (int t = 1; t <= n; t++) map[t][i] = 0;
break;
}
}
}
printf("\n");
}
return 0;
}
请问有什么解决方案
#include
#include
#include
#include
#include <memory.h>
using namespace std;
int main() {
int case1, point, num_edge;
cin >> case1;
while(case1--) {
cin >> point >> num_edge;
int a, b;
vector result;
priority_queue<int, vector, greater > readyTasks;
vector task[point+1];
int indegree[point+1];
memset(indegree,0,sizeof(indegree));
for(int i = 0; i < num_edge; i++) {
cin >> a >> b;
indegree[b]++;
task[a].push_back(b);
}
for(int i = 1; i <= point; i++) {
if(indegree[i] == 0) {
readyTasks.push(i);
}
}
while(!readyTasks.empty()) {
int temp = readyTasks.top();
readyTasks.pop();
result.push_back(temp);
for(auto it = task[temp].begin(); it != task[temp].end(); it++) {
indegree[*it]--;
if(indegree[*it] == 0) {
readyTasks.push(*it);
}
}
}
for(int i = 0; i < result.size(); i++) {
cout << result[i] << " ";
}
cout << endl;
}
return 0;
}
#include
#include
#include
#include
#include <memory.h>
using namespace std;
int main() {
int case1, point, num_edge;
cin >> case1;
while(case1--) {
cin >> point >> num_edge;
int a, b;
vector result;
priority_queue<int, vector, greater > readyTasks;
vector task[point+1];
int indegree[point+1];
memset(indegree,0,sizeof(indegree));
for(int i = 0; i < num_edge; i++) {
cin >> a >> b;
indegree[b]++;
task[a].push_back(b);
}
for(int i = 1; i <= point; i++) {
if(indegree[i] == 0) {
readyTasks.push(i);
}
}
while(!readyTasks.empty()) {
int temp = readyTasks.top();
readyTasks.pop();
result.push_back(temp);
for(auto it = task[temp].begin(); it != task[temp].end(); it++) {
indegree[*it]--;
if(indegree[*it] == 0) {
readyTasks.push(*it);
}
}
}
for(int i = 0; i < result.size(); i++) {
cout << result[i] << " ";
}
cout << endl;
}
return 0;
}
可以采用文件输入的形式进行输入,避免重复手动输入