
实验七图.doc
21页实验七 图【实验目的】1、掌握图的邻接矩阵和邻接表表达2、掌握图的深度优先和广度优先搜索措施3、掌握图的最小生成树Prim算法4、掌握图的拓扑排序算法5、掌握图的单源最短途径dijkstra算法实验学时】4-6学时【实验预习】回答如下问题:1、写出图7-1无向图的邻接矩阵表达图7-1 无向图G12、写出图7-2有向图的邻接表表达图7-2 有向图G23、写出图7-1的深度优先搜索序列和广度优先搜索序列深度:ABDHECFG广度:ABCFDEGH4、写出图7-2的拓扑序列,阐明该有向图与否有环?5、根据图7-3,写出其最小生成树图7-3 无向带权图G36、根据图7-4,求从顶点A到其她顶点的单源最短途径图7-4有向带权图G4【实验内容和规定】1、 编写程序exp7_1.c,实现图的邻接矩阵存储及图的深度优先搜索和广度优先搜索以图7-1的无向图为例,补充完整程序,调试运营并写出运营成果运营成果:(涉及输入数据)exp7_1.c参照程序如下:#include<stdio.h>#define N 20#define TRUE 1#define FALSE 0int visited[N];ﻩﻩ/*访问标志数组*/typedef struct { /*辅助队列的定义*/ int data[N]; int front,rear;}queue;typedef struct { ﻩ/*图的邻接矩阵表达*/ int vexnum,arcnum; char vexs[N]; int arcs[N][N];}MGraph;void createGraph(MGraph *g); /*建立一种无向图的邻接矩阵*/void dfs(int i, MGraph *g); /*从第i个顶点出发深度优先搜索*/void tdfs(MGraph *g); ﻩ/*深度优先搜索整个图*/void bfs(int k, MGraph *g); /*从第k个顶点广度优先搜索*/void tbfs(MGraph *g); /*广度优先搜索整个图*/void init_visit(); ﻩ/*初始化访问标记数组*/void createGraph(MGraph *g) { /*建立一种无向图的邻接矩阵*/ int i=0,j,e=0; char v; g->vexnum=0; g->arcnum=0; printf("\n输入顶点序列(以#结束):\n"); while ((v=getchar())!='#') { g->vexs[i]=v; ﻩ/*读入顶点信息*/ i++; } g->vexnum=i; /*顶点数目*/ for (i=0;i<g->vexnum;i++) ﻩ/*邻接矩阵初始化*/ for (j=0;j<g->vexnum;j++) g->arcs[i][j]=0;/*(1)-邻接矩阵元素初始化为0*/ printf("\n输入边的信息(顶点序号,顶点序号),以(-1,-1)结束:\n"); scanf("%d,%d",&i,&j); ﻩ/*读入边(i,j)*/ while (i!=-1) { ﻩ/*读入i为-1时结束*/ g->arcs[i][j]=1; /*(2)-i,j相应边等于1*/ g->arcs[j][i]=1; e++; scanf("%d,%d",&i,&j); } g->arcnum=e; /*边数目*/}/* createGraph *//*(3)---从第i个顶点出发深度优先搜索,补充完整算法*/void dfs(int i, MGraph *g){ int j; printf("%c",g->vexs[i]); visited[i]=1; for(j=0;j<g->vexnum;j++) if(g->arcs[i][j]==1&&(!visited[j])) dfs(j,g);}/* dfs */void tdfs(MGraph *g) { /*深度优先搜索整个图*/ int i; printf("\n从顶点%C开始深度优先搜索序列:",g->vexs[0]); for (i=0;i
以图7-2的有向图为例,补充完整程序,调试运营并写出运营成果运营成果:(涉及输入数据)exp7_2.c程序代码参照如下:#include
