拓扑排序

时间:2024.3.23

武 汉 工 程 大 学

计算机科学与工程学院

《数据结构》实验报告


第二篇:数据结构 拓扑排序


【拓扑排序】

任务:编写函数实现图的拓扑排序。

#include "stdio.h"

#include "stdlib.h"

#include "conio.h"

typedef struct ArcNode{

int adjvex;

struct ArcNode *nextarc; }ArcNode,*Arclink;

typedef struct VNode{

char data;

Arclink firstarc;

}VNode,AdjList[20];

typedef struct{

AdjList vertices;

int vexnum,arcnum;

}ALGraph,*GLink;

int visited[20];

int finished[20];

void dfs(GLink &g,int v,int &flag) {

Arclink p;

printf("%c\n",g->vertices[v]); p=g->vertices[v].firstarc; while(p!=NULL)

{

if(finished[p->adjvex]==0) {

dfs(g,p->adjvex,flag); finished[p->adjvex]=1; }

p=p->nextarc ;

}

flag=0;

}

int dfs_topsort(GLink &g,int n) {

int flag=1,i;

for(i=0;i<n;i++)

{

visited[i]=0;

finished[i]=0;

}

printf("\n请输入起始点的编号,按回车确认:"); scanf("%d",&i);

i--;

while(flag)

{

if(visited[i]==0)

{

dfs(g,i,flag);

}

}

return flag;

}

int LocateVex(ALGraph G,char m){

int i;

for(i=0;i<G.vexnum;i++)

if(G.vertices[i].data==m)return i;

return 0;

}

int Creat_Graph1(GLink &G){

int i,j,r;char m,n;Arclink p;

printf("请输入顶点数:");

scanf("%d",&(G->vexnum));

printf("请输入边数:");

scanf("%d",&(G->arcnum));

printf("请输入图的所有顶点:\n");

getchar();

for(i=0;i<G->vexnum;i++)

{

scanf("%c",&(G->vertices[i].data)); getchar();

G->vertices[i].firstarc=NULL;

}

printf("请输入图的所有边:\n");

for(r=0;r<G->arcnum;r++){

scanf("%c",&m);

getchar();

printf("->");

scanf("%c",&n);

getchar();

i=LocateVex(*G,m);

j=LocateVex(*G,n);

p=(ArcNode*)malloc(sizeof(ArcNode));

p->adjvex=j;

p->nextarc=G->vertices[i].firstarc;

G->vertices[i].firstarc=p;

}

return 1;

}

void main(){

int x=1,t,i;

GLink g;

g=(GLink)malloc(sizeof(ALGraph));

while(x){

system("cls");

printf("--------------------\n");

printf("1.图的创建\n");

printf("2.拓扑排序\n");

printf("3.结束程序\n");

printf("--------------------\n");

printf("请输入要进行的操作:");

scanf("%d",&t);

switch(t){

case 1: if(Creat_Graph1(g))

printf("创建成功\n");

for(i=0;i<g->vexnum;i++)

printf("编号%d点的数据为:%c\n",i+1,g->vertices[i]); getch();

break;

case 2: if(!(dfs_topsort(g,g->vexnum)))

printf("排序成功");

else printf("\n排序未成功");

getch();

break;

case 3: x=0;

break;

} } default:printf("输入的操作码错误\n\n"); }

更多相关推荐:
拓扑排序实验报告

实验题目图的应用实验目的1熟练掌握图的基本存储方法2熟练掌握图的深度优先和广度优先搜索方法3掌握AOV网和拓扑排序算法4掌握AOE网和关键路径实验内容拓扑排序任意给定一个有向图设计一个算法对它进行拓扑排序拓扑排...

数据结构-拓扑排序-实验报告与代码

实验报告七拓扑排序一需求分析2实现有向图的创建遍历1采用邻接表法的存储结构来定义有向图3实现栈的创建及其基本操作进栈退栈判空4求图中顶点的入度二算法设计本程序中采用的数据模型用到的抽象数据类型的定义程序的主要算...

数据结构实验报告4拓扑排序

01510800班郭哲学号20xx0259实验报告01510800班郭哲学号20xx0259101510800班郭哲学号20xx0259实验名称拓扑排序实验原理利用拓扑排序的原理读入图并将图按照拓扑排序的顺序输...

数据结构拓扑排序实验报告

拓扑排序基本要求用邻接表建立一个有向图的存储结构利用拓扑排序算法输出该图的拓扑排序序列编程思路首先图的创建采用邻接表建立逆向插入到单链表中特别注意有向是不需要对称插入结点且要把输入的字符在顶点数组中定位Loca...

拓扑排序实验报告

数学与计算机学院数据结构实验报告年级09数计学号20xx432125姓名刘宝成绩专业数电实验地点主楼401指导教师苗秀芬实验项目拓扑排序实验日期10年12月24日一实验目的1掌握图的存储结构及其基本操作学会定义...

实验十 图的拓扑排序问题

浙江大学城市学院实验报告课程名称数据结构与算法实验项目名称实验十图的拓扑排序问题学生姓名专业班级学号实验成绩指导老师签名日期一实验目的和要求1掌握拓扑排序概念2理解并能实现拓扑排序算法采用邻接表表示图二实验内容...

数据结构内排序实验报告

一实验目的1了解内排序都是在内存中进行的2为了提高数据的查找速度需要对数据进行排序3掌握内排序的方法二实验内容1设计一个程序exp101cpp实现直接插入排序算法并输出9876543210的排序过程1源程序如下...

实验10 图的拓扑排序问题,蓝礼巍

浙江大学城市学院实验报告课程名称数据结构与算法实验项目名称实验十图的拓扑排序问题学生姓名蓝礼巍专业班级学号实验成绩指导老师签名日期一实验目的和要求1掌握拓扑排序概念2理解并能实现拓扑排序算法采用邻接表表示图二实...

拓扑排序课程设计报告

软件技术课程设计拓扑排序一目的通过课程设计加深对程序设计语言和软件技术基础课程所学知识的理解熟练掌握和巩固C语言的基本知识和语法规范包括数据类型整形实型字符型指针数组结构等运算类型算术运算逻辑运算自增自减运算赋...

内部排序实验报告

深圳大学实验报告课程名称学院报告人实验时间实验报告提交时间教务部制深圳大学学生实验报告用纸2教师批改学生实验报告时间应在学生提交实验报告时间后10日内

实验报告_排序与查找

电子科技大学信息与软件工程学院实验报告电子科技大学实验报告课程名称学生姓名学号点名序号指导教师实验地点实验时间20xx20xx2学期信息与软件工程学院第1页电子科技大学信息与软件工程学院实验报告实验报告二学生姓...

排序算法实验报告

实验课程算法分析与设计实验名称几种排序算法的平均性能比较验证型实验实验目标1几种排序算法在平均情况下哪一个更快2加深对时间复杂度概念的理解实验任务1实现几种排序算法selectionsortinsertions...

拓扑排序实验报告(9篇)