信息工程系软件技术学生课程表(拓扑排序)拓扑图为:(图不好粘贴)运用拓扑概念排序的结果:C1 , C9 , C3 , C2 , C7 , C4, C5 , C8 , C6C1计算机应用基础 C2 C语言 C3 VB语言 C4 JSP C5数字逻辑电路 C6软件工程C7计算机网络基础 C8 Java语言 C9计算机数学基础/*-------------------------------主类-----------------------------*/public class Navy1 { public static void main(String[] args) { topology(); //调用拓扑的构造方法 } public static void topology() { //构造拓扑方法 /** 声明拓扑图中的元素 定义节点和节点之间的关系 Entry(a,b)a为b的前导 **/ Entry[] relations = { new Entry(9, 2), new Entry(3,7), new Entry(7, 5), new Entry(5, 8), new Entry(8, 6), new Entry(4, 6), new Entry(1, 3), new Entry(7, 4), new Entry(9, 5), new Entry(2, 8) }; int n = 9; int n1 = 9; /*计算拓扑图中节点数*/ int[] count = { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; /*开辟内存空间*/ Node[] top = { null, null, null, null, null, null, null, null, null, null }; Node p = null; for (int i = 0; i < relations.length; i++) { count[relations[i].k]++; p = new Node(); p.suc = relations[i].k; p.next = top[relations[i].j]; top[relations[i].j] = p; } int r = 0; int[] qlink = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; for (int i = 1; i <= n; i++) { if (count[i] == 0) { qlink[r] = i; r = i; } } int f = qlink[0]; System.out.println("题目及要求:"); System.out.println("课程排课程序。写一个程序,实现对某个专业的课程进行排课的功能。"); System.out.println("已知某专业的课程和它们的前导和后续关系(以有向图的形式表示),"); System.out.println("请用拓扑排序算法求出这些课程的优先关系并输出一种排课结果"); System.out.println("--------------------------------------"); System.out.println("08信息工程系软件技术课程表(拓扑排序)"); while (true) { System.out.println(f); if (f == 0) //结束条件 { break; } else { n1--; p = top[f]; while (true) { if (p == null) { break; } else { count[p.suc]--; if (count[p.suc] == 0) { qlink[r] = p.suc; r = p.suc; } p = p.next; } } f = qlink[f]; } } System.out.println("结束的标志为:" + n1); System.out.println("--------------------------------------------"); System.out.println("注释(数字对应的课程):"); System.out.println("1 计算机应用基础 2 C语言 3 VB语言 "); System.out.println("4 JSP 5 数字逻辑电路 6 软件工程"); System.out.println("7 计算机网络基础 8 Java语言 9 计算机数学基础"); System.out.println("--------------------------------------------"); } /*构造元素类*/ private static class Entry { public Entry(int begin, int end) //定义开始元素和结束元素 { this.j = begin; this.k = end; } int j; int k; } /*声明节点的后继*/ private static class Node { public Node(int suc, Node next) { this.suc = suc; this.next = next; } public Node() { } int suc; Node next; }}