题目描述


分析:拓扑排序,判断给出的序列是否是拓扑排序序列,只需要判断当前结点的度是否为0即可
#include<cstdio>
#include<vector>
using namespace std;
const int MAXV=1005;
vector<int> G[MAXV];
int degree[MAXV];
int temp[MAXV];
int a[MAXV];
int main(){
int n,m;
int u,v;
scanf("%d%d",&n,&m);
while(m--)
{
scanf("%d%d",&u,&v);
G[u].push_back(v);
degree[v]++;
}
scanf("%d",&m);
int num=0;
bool flag=false;
for(int k=0;k<m;k++){
copy(degree,degree+n+1,temp);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++){
if(temp[a[i]]!=0){
if(flag){
printf(" %d",k);
}
else{
printf("%d",k);
}
flag=true;
break;
}
else{
for(int j:G[a[i]]){
temp[j]--;
}
}
}
}
}
本文介绍了一种使用拓扑排序来验证给定序列是否为有效拓扑排序的方法。通过检查每个节点的入度来确定序列的有效性,并提供了一个C++实现示例。
137

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



