图论源代码——数据结构课堂作业
2016-12-20 19:16
316 查看
n(*≧▽≦*)n
拓扑排序算法
/***************************************/ /* 拓扑排序算法 */ /***************************************/ #include<stdlib.h> #include<stdio.h> #define M 20 typedef char vertextype; typedef struct node /*边结点类型定义*/ { int adjvex; struct node *next; } edgenode; typedef struct de /*带顶点入度的头结点定义*/ { edgenode* FirstEdge; vertextype vertex; int id; /*顶点的入度域*/ } vertexnode; typedef struct /*AOV网络的邻接表结构*/ { vertexnode adjlist[M]; int n,e; } AovGraph; void creat(AovGraph *g,char *filename) /*建立AOV网络的存储结构*/ { int i,j,k; edgenode *s; FILE *fp; fp=fopen(filename,"r"); if (fp) { fscanf(fp,"%d%d",&g->n,&g->e); /*输入图中的顶点数与边数*/ for(i=0; i<g->n; i++) /*输入顶点值*/ { fscanf(fp,"%1s",&g->adjlist[i].vertex); g->adjlist[i].FirstEdge=NULL; g->adjlist[i].id=0; /*入度初始化为0*/ } for(k=0; k<g->e; k++) { fscanf(fp,"%d%d",&i,&j); s=(edgenode*)malloc(sizeof(edgenode)); s->adjvex=j; g->adjlist[j].id++; /*顶点j的入度加1*/ s->next=g->adjlist[i].FirstEdge; g->adjlist[i].FirstEdge=s; } } } void print(AovGraph g) { edgenode *p; int i; for (i=0; i<g.n; i++) { printf("%c %d ", g.adjlist[i].vertex,g.adjlist[i].id); p=g.adjlist[i].FirstEdge; while (p) { printf("%d-->",p->adjvex); p=p->next; } printf("\n"); } } /*函数功能:拓扑排序 函数参数:AOV网邻接表存储结构变量g 函数返回值:拓扑排序输出的顶点个数 */ int TopSort(AovGraph g) { int k=0,i,j,v, flag[M]; int queue[M]; /*队列*/ int h=0,t=0; edgenode* p; for (i=0; i<g.n; i++) flag[i]=0; /*访问标记初始化*/ /*先将所有入度为0的结点进队*/ /*将程序补充完整*/ for(int i=0; i<g.n; i++) { for(int j=0; j<g.n; j++) { if(g.adjlist[j].id==0) { printf("%d ",j); g.adjlist[j].id = -1; p=g.adjlist[i].FirstEdge; while (p) { g.adjlist[p->adjvex].id--; //printf("%d-->",p->adjvex); p=p->next; } break; } } } return k; //返回输出的顶点个数 } int main() { int k=0; AovGraph g; creat(&g,"aov.txt"); /*假设图8.25所示的AOV网输入文件为aov.txt*/ printf("\n图8.27所示AOV网的邻接表是:\n"); print(g); k=TopSort(g); if(k<g.n) printf("\n该图存在环!\n"); return 0; }
拓扑排序算法
相关文章推荐
- 数据结构---树
- 数据结构(七)
- 数据结构-C++实现(二):单向链表
- 数据结构 表 table 串 string
- 数据结构---串
- 数据结构与算法(C语言版)__快速排序
- 数据结构试验四 栈与字符串
- 结合stack数据结构,实现不同进制转换的算法
- 剪短的python数据结构和算法的书《Data Structures and Algorithms Using Python》
- 【数据结构与算法】二叉树的遍历
- Python基本数据结构
- 数据结构之直接插入排序(二)
- Android 打造任意层级树形控件 考验你的数据结构和设计
- 数据结构之冒泡排序(一)
- 用jxl将mysql的数据结构导入到excel中,用过poi将oracle表结构导入
- 数据结构基础(一)
- 《数据结构与算法分析》 第四章 树(二)---二叉树,二叉查找树
- redis数据结构之双端链表
- 数据结构--快速排序
- 【Machine learning(python篇)】-几种常用的数据结构