第十二周项目5-拓扑排序算法验证
来源:互联网 发布:华为软件开发招聘 编辑:程序博客网 时间:2024/05/21 18:50
graph.h
#ifndef GRAPH_H_INCLUDED#define GRAPH_H_INCLUDED#define MAXV 100 //最大顶点个数#define INF 32767 //INF表示∞typedef int InfoType;//以下定义邻接矩阵类型typedef struct{ int no; //顶点编号 InfoType info; //顶点其他信息,在此存放带权图权值} VertexType; //顶点类型typedef struct //图的定义{ int edges[MAXV][MAXV]; //邻接矩阵 int n,e; //顶点数,弧数 VertexType vexs[MAXV]; //存放顶点信息} MGraph; //图的邻接矩阵类型//以下定义邻接表类型typedef struct ANode //弧的结点结构类型{ int adjvex; //该弧的终点位置 struct ANode *nextarc; //指向下一条弧的指针 InfoType info; //该弧的相关信息,这里用于存放权值} ArcNode;typedef int Vertex;typedef struct Vnode //邻接表头结点的类型{ Vertex data; //顶点信息 int count; //存放顶点入度,只在拓扑排序中用 ArcNode *firstarc; //指向第一条弧} VNode;typedef VNode AdjList[MAXV]; //AdjList是邻接表类型typedef struct{ AdjList adjlist; //邻接表 int n,e; //图中顶点数n和边数e} ALGraph; //图的邻接表类型//功能:由一个反映图中顶点邻接关系的二维数组,构造出用邻接矩阵存储的图//参数:Arr - 数组名,由于形式参数为二维数组时必须给出每行的元素个数,在此将参数Arr声明为一维数组名(指向int的指针)// n - 矩阵的阶数// g - 要构造出来的邻接矩阵数据结构void ArrayToMat(int *Arr, int n, MGraph &g); //用普通数组构造图的邻接矩阵void ArrayToList(int *Arr, int n, ALGraph *&); //用普通数组构造图的邻接表void MatToList(MGraph g,ALGraph *&G);//将邻接矩阵g转换成邻接表Gvoid ListToMat(ALGraph *G,MGraph &g);//将邻接表G转换成邻接矩阵gvoid DispMat(MGraph g);//输出邻接矩阵gvoid DispAdj(ALGraph *G);//输出邻接表G#endif // GRAPH_H_INCLUDEDgraph.cpp
#include <stdio.h>#include <malloc.h>#include "graph.h"void TopSort(ALGraph *G){ int i,j; int St[MAXV],top=-1; //栈St的指针为top ArcNode *p; for (i=0; i<G->n; i++) //入度置初值0 G->adjlist[i].count=0; for (i=0; i<G->n; i++) //求所有顶点的入度 { p=G->adjlist[i].firstarc; while (p!=NULL) { G->adjlist[p->adjvex].count++; p=p->nextarc; } } for (i=0; i<G->n; i++) if (G->adjlist[i].count==0) //入度为0的顶点进栈 { top++; St[top]=i; } while (top>-1) //栈不为空时循环 { i=St[top]; top--; //出栈 printf("%d ",i); //输出顶点 p=G->adjlist[i].firstarc; //找第一个相邻顶点 while (p!=NULL) { j=p->adjvex; G->adjlist[j].count--; if (G->adjlist[j].count==0)//入度为0的相邻顶点进栈 { top++; St[top]=j; } p=p->nextarc; //找下一个相邻顶点 } }}int main(){ ALGraph *G; int A[7][7]= { {0,0,1,0,0,0,0}, {0,0,0,1,1,0,1}, {0,0,0,1,0,0,0}, {0,0,0,0,1,1,0}, {0,0,0,0,0,0,0}, {0,0,0,0,0,0,0}, {0,0,0,0,0,1,0} }; ArrayToList(A[0], 7, G); DispAdj(G); printf("\n"); printf("拓扑序列:"); TopSort(G); printf("\n"); return 0;}
阅读全文
0 0
- 第十二周项目5拓扑排序算法验证
- 第十二周项目5-拓扑排序算法验证
- 第十二周 项目验证算法 (5)拓扑排序算法验证
- 第十二周项目五——拓扑排序算法验证
- 第十二周项目五——拓扑排序算法验证
- 第十二周 拓扑排序算法验证
- 第十二周 拓扑排序算法验证
- 第十三周项目--验证算法--5拓扑排序算法验证
- 第十二章拓扑排序算法验证
- 项目5-拓扑排序算法的验证
- 第十三周项目5-拓扑排序算法验证
- 第十三周项目5—拓扑排序算法验证
- 第十三周项目5--拓扑排序算法验证
- 第十三周项目5拓扑排序算法验证
- 十三周 项目5-拓扑排序算法验证
- 第13周 项目5-拓扑排序算法验证
- 第十三周 项目5-拓扑排序算法验证
- 第13周项目5-拓扑排序算法的验证
- ps光束,泼墨技巧
- 【HTTP】理解HTTP幂等性
- 购物车
- Butterknife注入框架插件使用介绍
- spring_day4_05-ssh整合(dao使用hibernateTemplate)
- 第十二周项目5-拓扑排序算法验证
- 一:如何添加可信站点?
- Leetcode算法学习日志-202 Happy Number
- 项目管理之甘特图和工程网络图(PERT图)
- Xposed模块开发,免重启改进方案
- 一起快速学习微信开发-1.开始前必要装备
- spring_day4_06-ssh整合(事务配置)
- 第十三周项目1验证算法
- 解决光标闪烁问题