本题链接:点击打开链接
本题大意:
首先输入一个N,表示有N行,也表示有N个点,编号从1到N,接下来有N行,第i行输入的数据代表这些编号要在i的前面,每行输入0表示结束,求一种符合题意的拓扑序列。解题思路:
此题就是基本的拓扑排序,弄清楚题意应该就不难了吧,具体请参考代码:
#include<stdio.h> #include<string.h> #define INF 0x3f3f3f3f #define MAX 220 int indegree[MAX]; int head[MAX]; struct node{ int from,to,next; }; node edge[MAX]; int num,n; void getmap(int u,int v) { node e={u,v,head[u]}; edge[num]=e; head[u]=num++; } void toposort() { for(int i=1;i<=n;i++) { int j=1; while(indegree[j]) j++; if(i<n) printf("%d ",j); else printf("%d\n",j); indegree[j]=-1; for(int i=head[j];i!=-1;i=edge[i].next) { int u=edge[i].to; if(indegree[u]) indegree[u]--; } } } int main() { while(scanf("%d",&n)!=EOF) { num=0; memset(indegree,0,sizeof(indegree)); memset(head,-1,sizeof(head)); for(int i=1;i<=n;i++) { int b; while(scanf("%d",&b),b) { getmap(i,b); indegree[b]++; } } toposort(); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-12-17 10:50:39