教学计划编制问题 设计要求:针对计算机系本科课程,根据课程之间的依赖关系(如离散数学应在数据结构之前
教学计划编制问题设计要求:针对计算机系本科课程,根据课程之间的依赖关系(如离散数学应在数据结构之前开设)制定课程安排计划,并满足各学期课程数目大致相同。数据结构的课程设计...
教学计划编制问题
设计要求:针对计算机系本科课程,根据课程之间的依赖关系(如离散数学应在数据结构之前开设)制定课程安排计划,并满足各学期课程数目大致相同。
数据结构的课程设计 c语言编写 跪求代码 (拓扑排序) 感激不尽~~!!!
我的QQ邮箱:1062273397@qq.com 展开
设计要求:针对计算机系本科课程,根据课程之间的依赖关系(如离散数学应在数据结构之前开设)制定课程安排计划,并满足各学期课程数目大致相同。
数据结构的课程设计 c语言编写 跪求代码 (拓扑排序) 感激不尽~~!!!
我的QQ邮箱:1062273397@qq.com 展开
2个回答
展开全部
信息工程系软件技术学生课程表(拓扑排序)
拓扑图为:(图不好粘贴)
运用拓扑概念排序的结果:
C1 , C9 , C3 , C2 , C7 , C4, C5 , C8 , C6
C1计算机应用基础 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;
}
}
拓扑图为:(图不好粘贴)
运用拓扑概念排序的结果:
C1 , C9 , C3 , C2 , C7 , C4, C5 , C8 , C6
C1计算机应用基础 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;
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询