偏序是指集合中仅有部分元素之间可以比较,而全序是指集合中任意两个元素之间都可以比较
偏序是指集合中仅有部分元素之间可以比较,而全序是指集合中任意两个元素之间都可以比较
1.一个AOV网用邻接矩阵表示,如下页图一,用拓扑排序求该AOV网的一个拓扑序列,给出相应的步骤。
2.拓扑排序的结果不是唯一的,请给出如下页图2所示的有向图的所有可能的拓扑序列。
3.请在深度优先搜索算法的基础上设计一个对有向无环图进行拓扑排序的算法。
1.答:
v0-v1,v0-v2;
v1-v3,v1-v4,v1-v5;
v2-v4,v2-v6;
v4-v6
v5-v6
入度为0,可画图v0-v1-v3-v5-v4-v2-v6
2.答:
由AOV网构造拓扑序列的拓扑排序算法主要是循环执行以下两步,直到不存在入度为0的顶点为止:选择一个入度为0的顶点并输出之,从网中删除此顶点及所有出边。
循环结束后,若输出的顶点数小于网中的顶点数,则输出“有回路”信息,否则输出的顶点序列就是一种拓扑序列。
由AOV网构造出拓扑序列的实际意义是:如果按照拓扑序列中的顶点次序,在开始每一项活动时,能够保证它的所有前驱活动都已完成,从而使整个工程顺序进行,不会出现冲突的情况。
3答:
1、import java.util.*;
2、public class Topology
3、{
4、static final int MAX = 20; //最大点数
5、static int[][] g; //图
6、static LinkedList queue; //保存排序结果
7、static int[] ingoing; //记录节点入度
8、static int[] outgoing;//记录节点出度
9、static int[] used;
10、static int ver;
11、static int edge;
12、
13、static void tplgOrd(){
14、//从所有出度为0的点开始遍历
15、for(int i=1;i<=ver;i++){
16、if(outgoing[i] == 0)
17、 helper(i);
18、 }
19、 }
20、
21、static void helper(int index){
22、//入度为0,说明没有先驱节点了
23、if(ingoing[index]==0) {
24、if(used[index]==0){used[index] = 1;queue.addLast(index);}
25、return;
26、 }
27、//有边指向当前节点说明还有前驱节点,处理前驱节点
28、for(int i = 1;i <= ver;i++){
29、if(g[i][index] < Integer.MAX_VALUE) //有边相连
30、 helper(i);
31、 }
32、//到这里一定是所有的前驱节点都处理过了,所以只要把当前节点加入队列即可。
33、if(used[index] == 0){
34、 used[index] = 1;
35、 queue.addLast(index);
36、 }
37、 }
38、
39、static void init(){
40、 g = new int[ver+5][ver+5];
41、 queue = new LinkedList();
42、 ingoing = new int[ver+5];
43、 outgoing = new int[ver+5];
44、 used = new int[ver+5];
45、for(int i=1;i<=ver;i++){
46、//初始S为空,Q为全部节点
47、for(int j=0;j
48、 g[i][j] = Integer.MAX_VALUE;
49、 }
50、 }
51、
52、static void input(){
53、 Scanner cin = new Scanner(System.in);
54、 System.out.println("请输入点数边数");
55、 ver = cin.nextInt();
56、 edge = cin.nextInt();
57、int s,e,w;
58、 init();
59、 System.out.println("起点终点");
60、for(int i=0;i
61、 s = cin.nextInt();
62、 e = cin.nextInt();
63、 g[s][e] = 1;
64、if(s != e){
65、 ingoing[e] += 1;
66、 outgoing[s] += 1;
67、 }
68、 }
69、 }
70、
71、static void print(){
72、 System.out.println("拓扑排序结果:");
73、 Iterator iter = queue.iterator();
74、while(iter.hasNext()){
75、 System.out.print(iter.next()+" ");
76、 }
77、 System.out.println();
78、 }
79、public static void main(String[] args){
80、 input();
81、 tplgOrd();
82、 print();
83、 }
84、}