题意:大概意思是--有一个家族聚集在一起,现在由家族里面的人讲话,辈分高的人先讲话。现在给出n,然后再给出n行数 第i行输入的数表示的意思是第i行的子孙是哪些数,然后这些数排在i的后面。

比如样例 5

0

4 5 1 0

1 0

5 3 0

3 0

1后面没有数

2后面有4 5 1

3后面有1

4后面有5 3

5后面有3

拓扑排序的一点小体会

(1)先把图储存下来,然后储存相应顶点的度数

(2)在图中选择没有前驱的点(即入度为0的点),加入队列中

(3)将以这一点为起点的边删去(将这一点指向的点的入度减1)

(4)重复上面的操作,直到没有入度为0的点

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int iq,n;
int queue[1000],map[1000][1000],indegree[1000]; void toposort()
{
int i,j,k;
iq=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(map[i][j])
indegree[j]++;
}
} for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(indegree[j]==0)
{
queue[iq++]=j;
break;
}
}
indegree[j]=-1;//把这一点加进去以后,将这一点的入度记为-1,以免下次又将它加进队列
for(k=1;k<=n;k++)
{
if(map[j][k])
indegree[k]--;
}
}
} int main()
{
int i,v;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
while(scanf("%d",&v)!=EOF&&v)
map[i][v]=1;
}
toposort();
for(i=0;i<iq-1;i++)
printf("%d ",queue[i]);
printf("%d",queue[i]);
}

  

拓扑排序的第一题--@_@

go--go

最新文章

  1. Sublime Text 配置代码
  2. Java 8函数编程轻松入门
  3. 边工作边刷题:70天一遍leetcode: day 84-3
  4. JAVA程序的创建与编辑
  5. 【NOIP2013】【P1441】花匠
  6. lightoj 1015
  7. FragmentStatePagerAdapter.notifyDataSetChanged不刷新页面的解决的方法
  8. jdk-动态代理
  9. NHibernate之映射文件配置说明(转载3)
  10. js如何获取object类型里的键值
  11. Windows7搭建Wamp环境
  12. 五、Java多人博客系统-2.0版本-数据库设计
  13. 转:VB.NET Office操作之Word
  14. mysql表管理
  15. Xamarin.Android Timer使用方法
  16. vuejs之v-if-ajax异步请求数据遇到的坑
  17. 131、ThreadLocal (转载)
  18. 安装 nginx
  19. openstack(Pike 版)集群部署(七)--- Cinder 部署
  20. 比较undefined和“undefined”

热门文章

  1. 笔记--js实现异步
  2. &lt;改变imageView的颜色和状态栏&gt;
  3. python学习——正则表达式
  4. python模拟登陆知乎
  5. win7(32位)旗舰版共享HP1010打印机给WINXP专业版
  6. 浅谈AVL树,红黑树,B树,B+树原理及应用
  7. PhotoZoom安装之后没有快捷方式怎么解决?
  8. 哪里获取ZBrush简体中文版?
  9. JS 数值转换、加减乘除
  10. ES6之用let,const和用var来声明变量的区别