主题:[讨论]小妹我现在有一个拓扑排序的问题想请教各位高手
加菲2009
[专家分:0] 发布于 2007-11-29 12:30:00
小妹我现在有一个拓扑排序的问题想请教各位高手
现有一个TXT文本,内有数据如下:
序号 名称 需要事先学过课程的编号
01 计算机导论
02 高等数学
03 线性代数
04 大学英语1
05 大学英语2 04
06 大学英语3 05
07 大学英语4 06
08 专业英语 07
09 C语言程序设计 01
10 计算机组成与原理 01
11 数论 02 03
12 JAVA程序设计 09
13 数据结构 09
14 图形学 13
15 操作系统 13
16 UNXI操作系统 15
17 计算机系统结构 10 15
18 数据库原理 01 02
19 计算机网络 01
20 分布式数据库 18 19
要求从TXT文本里读取数据,然后进行拓扑排序,以图形界面的形式将结果表示出来,请教各位高手~~~~如何对这些数据进行拓扑排序啊????语言不限,望各位高手大人能不吝指教,写下源代码,一解小妹的难题[em3]
回复列表 (共4个回复)
沙发
justforfun626 [专家分:18460] 发布于 2007-11-29 21:58:00
[code=c]
#include "bool.h"
#include "graph.h"
#include "queue.h"
void compute_indegrees(graph *g, int in[])
{
int i,j; /* counters */
for (i=1; i<=g->nvertices; i++) in[i] = 0;
for (i=1; i<=g->nvertices; i++)
for (j=0; j<g->degree[i]; j++) in[ g->edges[i][j] ] ++;
}
void topsort(graph *g, int sorted[])
{
int indegree[MAXV]; /* indegree of each vertex */
queue zeroin; /* vertices of indegree 0 */
int x, y; /* current and next vertex */
int i, j; /* counters */
compute_indegrees(g,indegree);
init_queue(&zeroin);
for (i=1; i<=g->nvertices; i++)
if (indegree[i] == 0) enqueue(&zeroin,i);
j=0;
while (empty(&zeroin) == FALSE) {
j = j+1;
x = dequeue(&zeroin);
sorted[j] = x;
for (i=0; i<g->degree[x]; i++) {
y = g->edges[x][i];
indegree[y] --;
if (indegree[y] == 0) enqueue(&zeroin,y);
}
}
if (j != g->nvertices)
printf("Not a DAG -- only %d vertices found\n",j);
}
int main()
{
graph g;
int out[MAXV];
int i;
read_graph(&g,TRUE);
print_graph(&g);
topsort(&g,out);
for (i=1; i<=g.nvertices; i++)
printf(" %d",out[i]);
printf("\n");
}
[/code]
Copied from
http://www.cs.sunysb.edu/~skiena/392/programs/topsort.c
板凳
加菲2009 [专家分:0] 发布于 2007-11-30 21:07:00
看不懂~~~能写出思路吗?
3 楼
FancyMouse [专家分:13680] 发布于 2007-11-30 22:08:00
每次挑选入度为0的顶点,然后删去从这个点出发的所有边。循环往复。如果找不到这样的点,说明图中有环,无法拓扑排序。
4 楼
justforfun626 [专家分:18460] 发布于 2007-12-01 00:33:00
思路
[quote]
[b]Topological Sort Algorithm[/b]
A: Direct Acyclic Graph(DAG), Sort the nodes in such order, if we have an edge E(u, v), u must before v in the sorted list.
It is very useful in scheduling, a possible sequence of activities which considers all requirements ( availability of material - storage - processing - sale).
[b]In school, since the course has its prerequisite courses, scheduling might affect your graduation date. Here is one algorithm.[/b]
1. Find a node without predecessor
2. Append the node at the end of the sorted list
3. 'Remove' the node and all its edges
4. Repeat step 1 until the graph is empty
[/quote]
Copied from
[url]http://bobcat.webappcabaret.net/javachina/faq/algo_01.htm#algo_Q5051[/url]
我来回复