4 3 1 2 2 3 4 3
1 2 4 3
拓扑排序,对有向图进行排序,具体规则是:入度为零的点优先考虑,然后去掉这个点连接的所有边,一次进行下去,得到的就是排序的结果......
这个题自己大约理解了些,就按着思路写程序,先找到入度为零的点,然后输出,去掉所有这个点连接的边,依次循环下去,就输出了相应的序列.....
#include<stdio.h> #include<string.h> int n,x[505][505],ind[505]; void tpsort() { int i,j,k; for(i=0;i<n;++i)//控制输出次数 { for(j=1;j<=n;++j)//寻找入度为零的点 { if(ind[j]==0) { break;//找到就跳出 } } if(i<n-1)//控制输出格式 { printf("%d ",j); } else { printf("%d\n",j); } ind[j]=-1;//标记上 for(k=1;k<=n;++k)//把这个点连接的所有边都去掉 { if(x[j][k]) { --ind[k];//如果有边,就减去1 } } } } int main() { int m,i,j,a,b; while(~scanf("%d%d",&n,&m)) { memset(x,0,sizeof(x)); memset(ind,0,sizeof(ind)); for(i=0;i<m;++i) { scanf("%d%d",&a,&b); if(!x[a][b])//保存每个边 { x[a][b]=1; ++ind[b]; } } tpsort();//调用函数 } return 0; }