题意:给出n个数的大小关系,输出从小到大排序后的结果。
思路:拓扑排序。
代码:
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<vector>
using namespace std;
int n,m;
int a[105][105];
int main() {
while(scanf("%d%d",&n,&m)==2&&n!=0){
memset(a,0,sizeof(a));
for(int i=1;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
a[y][x]=1;
a[y][0]++;
}
int f=0;
while(f<n){
vector<int> p;
for(int i=1;i<=n;i++){
if(!a[i][0]){
a[i][0]=-1;
if(f) printf(" ");
++f;
printf("%d",i);
p.push_back(i);
}
}
for(int i=0;i<p.size();i++){
for(int j=1;j<=n;j++){
if(a[j][p[i]]==1) a[j][p[i]]=0,a[j][0]--;
}
}
}
printf("\n");
}
return 0;
}
本文介绍了一种使用拓扑排序算法解决给定任务间依赖关系并进行正确排序的方法。通过输入任务间的大小关系,程序能够输出一个符合依赖顺序的任务序列。
156

被折叠的 条评论
为什么被折叠?



