玻璃助剂数据结构教程
实验七、 图算法上机实现
一、实验目的:
1.了解熟知图的定义和图的基本术语,掌握图的几种存储结构。 2.掌握邻接矩阵和邻接表定义及特点,并通过实例解析掌握邻接矩阵和邻接表的类型定义。 3.掌握图的遍历的定义、复杂性分析及应用,并掌握图的遍历方法及其基本思想。
二、实验内容:
1.建立无向图的邻接矩阵
2.图的深度优先搜索
3.图的广度优先搜索
三、实验步骤及结果:
1.建立无向图的邻接矩阵:
1)源代码:
#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 30
typedef struct
{
爬梯电动轮椅
char vertex[MAXSIZE];//顶点为字符型且顶点表的长度小于MAXSIZE int edges[MAXSIZE][MAXSIZE];//边为整形且edges为邻近矩阵
}MGraph;//MGraph为采用邻近矩阵存储的图类型
void CreatMGraph(MGraph *g,int e,int n)
{//建立无向图的邻近矩阵g->egdes,n为顶点个数,e为边数
int i,j,k;
printf("Input data of vertexs(0~n-1):\n");
for(i=0;i<n;i++)
g->vertex[i]=i; //读入顶点信息
电压跟随电路 for(i=0;i<n;i++)
for(j=0;j<n;j++)
g->edges[i][j]=0; //初始化邻接矩阵
for(k=1;k<=e;k++)//输入e条边
{
printf("Input edges of(i,j):");
打塞机 scanf("%d,%d",&i,&j);
g->edges[i][j]=1;
g->edges[j][i]=1;
}
}
void main()
{
int i,j,n,e;
MGraph *g; //建立指向采用邻接矩阵存储图类型指针
g=(MGraph*)malloc(sizeof(MGraph));//生成采用邻接举证存储图类型的存储空间
printf("Input size of MGraph:"); //输入邻接矩阵的大小
scanf("%d",&n);
printf("Input number of edge:"); //输入邻接矩阵的边数
scanf("%d",&e);
CreatMGraph(g,e,n); //生成存储图的邻接矩阵
printf("Output MGraph:\n");//输出存储图的邻接矩阵
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d",g->edges[i][j]);黄秋葵软胶囊
printf("\n");
}
}
2)运行结果:
2.图的深度优先搜索:
1)源代码:
#include "stdio.h"
钢套箱
#include "stdlib.h"
#define MAXSIZE 30
typedef struct node//邻接表结点
{
int adjvex;//邻接点域
struct node *next;//指向下一个邻接边结点的指针域
}EdgeNode; //邻接表结点类型
typedef struct vnode//顶点表结点
{
int vertex;//顶点域
EdgeNode *firstedge; //指向邻接表第一个邻接边节点的指针域
}VertexNode;//顶点表结点类型
void CreatAdjlist(VertexNode g[],int e,int n)
{//建立无向图的邻接表,n为顶点数,e为边数,g[]存储n个顶点表结点
EdgeNode *p;
int i,j,k;
printf("Input data of vetex(0~n-1);\n");
for(i=0;i<n;i++)//建立有n个顶点的顶点表
{
g[i].vertex=i; //读入顶点i信息
g[i].firstedge=NULL; //初始化指向顶点i的邻接表表头指针
}
for (k=1;k<=e;k++)//输入e条边