1、do *无向图的基本操作及应用*n 1 创建无向图的邻接矩阵 2 创建无向图的邻接表 3 无向图的深度优先遍历 4 无向图的广度优先遍历 *ncinn;switch(n)case 1:CreatUDG_M(MG);break;case 2:CreatUDG_ALG(ALG);dispgraph(ALG);case 3: dfstraverse(ALG);case 4:BFSTraver(MG);default:if (n!=5)错误,重新输入nwhile(n!=5);void UDN() MGraph MG;do *无向网的基本操作及应用*n 1 创建无向网的邻接矩阵 2 创建无向网的邻接表
2、3 prim算法求最小生成树 4 kraskal算法求最小生成树 *nCreateUDN_M(MG); CreateUDN(ALG);dispUDN(&ALG);prim(MG);Kruskal(MG);void DG() *有向图的基本操作及应用*n cout 1 创建有向图的邻接矩阵 2 创建有向图的邻接表 3 拓扑排序 4 退出CreatDG_M(MG); CreatDG_ALG(ALG);CreatDG_ALG(ALG);TopologicalSort(ALG);=4)=4);void DN() PathMatrix p1; ShortPathTable d1; dist2 d; pa
3、th2 p; *有向网的基本操作及应用*n 1 创建有向网的邻接矩阵 2 创建有向网的邻接表 3 关键路径 4 单源顶点最短路径问题 5 每对顶点最短路径问题 6 退出 CreateDNG_M(MG); CreateDN(ALG);dispDN(&CreateDN(ALG);CriticalPath(ALG); ShortestPath(MG,1,p1,d1);case 5:Floyd(MG,p,d);=6)=6);void main()ShowMainMenu();UDG(); UDN();DG();DN();/Graph.h(图的定义)#define MAXVEX 30#define MA
4、XCOST 1000typedef int InfoType;typedef structVertexType vexsMAXVEX; int arcsMAXVEXMAXVEX; int vexnum,arcnum;MGraph;typedef struct arcnodeint adjvex;/邻接点序号int w;/边或狐上的权InfoType *info;struct arcnode *next;ArcNode;typedef struct vnode VertexType data; /顶点信息int indegree;ArcNode *firstarc; /指向下一个边结点Vnode
5、,AdjListMAXVEX;AdjList vertices;int vexnum,arcnum;ALGraph;/UDGraph.h(无向图的基本操作及应用)void CreatUDG_M(MGraph &G) int i,j,c;请输入顶点数,边数 :G.vexnum;G.arcnum;请输入结点信息,如“1 2 3 .endl;for(i=1;i=G.vexnum;i+) G.vexsi;for(j=1;jj+)G.arcsij=0;for(c=1;c起点序号,终点序号:,c);ij; G.arcsij=1; G.arcsji=1;创建的邻接矩阵为:for(int i=1;for(in
6、t j=1;G.arcsijG.verticesi.data; G.verticesi.firstarc=NULL; printf(,i);sd; p=(ArcNode *)malloc(sizeof(ArcNode); q=(ArcNode *)malloc(sizeof(ArcNode); p-adjvex=d; q-adjvex=s;p-next=G.verticess.firstarc; /p插入顶点s的邻接表中 G.verticess.firstarc=p; q-next=G.verticesd.firstarc; /q插入顶点d的邻接表中 G.verticesd.firstarc=
7、q;void dispgraph(ALGraph G)int i; ArcNode *p;图的邻接表表示如下:);printf( %d,%c=,i,G.verticesi.data); p=G.verticesi.firstarc; while (p!=NULL)%d,p-adjvex);p=p-next;n/int visit20;void dfs(ALGraph G,int v)/从顶点v出发深度优先搜索 visitv=1;G.verticesv.data;ArcNode * p;p=G.verticesv.firstarc;while(p) if(visitp-adjvex!=1)dfs
8、(G,p-/whilevoid dfstraverse(ALGraph G)/对一个图进行深度优先搜索 int v;for(v=1;v0)if(visitw=0)visitw=1;q,w);w=NextAdjVex(G,u,w);/UNGraph.h(无向网的基本操作及应用)void CreateUDN_M(MGraph &int i,j,k,n;请输入顶点数和边数输入顶点G.arcsij=999;输入边的起点到终点的序号及权值for(k=1;kG.arcsij=n;G.arcsji=G.arcsij;/建立无向网的邻接矩阵存储结构/void CreateUDN(ALGraph &G) / 邻
9、接表建立无向网 int i,s,d,w1;ArcNode *p,*q;输入节点数和边数G.vexnum输入顶点,如“1 2 3.”i+) / 输入顶点 / 首先初始化为NULL dw1; / 输入一条边依附的起点序号和终点序号 p =(ArcNode *)malloc(sizeof(ArcNode); q =(ArcNode *)malloc(sizeof(ArcNode);info=(InfoType *)malloc(sizeof(InfoType);adjvex = d; / 保存该弧所指向的顶点位置 adjvex = s; *(p-info) = w1; / 保存权值到一个结点里 *(q- /保存权值到一个结点里 void dispUDN(ALGraph *G) /* 打印无向网每个结点的单链表 */int i, j;起点 权值 终点for(i = 1 ; i vexnum ; i+) while(G-verticesi.firstarc-next)G-verticesi.dataadjvex;*(G-info)verticesj.dataverticesi.firstarc = G- vertic
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1