图的实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
G>adjlist[i]、firstarc=NULL;
for (i=0;i<n;i++)//检查邻接矩阵中每个元素
for (j=n1;j>=0;j)
if (g、edges[i][j]!=0)//邻接矩阵得当前元素不为0
{
p=(ArcNode *)malloc(sizeof(ArcNode));//创建一个结点*p
void MatToList(MGraph g,ALGraph *&G)//将邻接矩阵g转换成邻接表G
{
int i,j,n=g、vexnum;//n为顶点数
ArcNode *p;
G=(ALGraph *)malloc(sizeof(ALGraph));
for (i=0;i<n;i++)//给邻接表中所有头结点得指针域置初值
{int no;
InfoType info;
} VertexType;//顶点类型
typedef struct//图得定义
{int edges[MAXV][MAXV];
int vexnum,arcnum;
VertexType vexs[MAXV];
} MGraph;//图得邻接矩阵类型
typedef struct ANode//弧得结点结构类型
{
int i,j;
for (i=0;i<g、vexnum;i++)
{
for (j=0;j<g、vexnum;j++)
if (g、edges[i][j]==INF)
printf("%3s","∞");
else
printf("%3d",g、edges[i][j]);
printf("\n");
}
}
void DispAdj(ALGraph *G)
#include<malloc、h>
#defineMAXV 100//最大顶点个数
#define INF 32767 //INF表示∞
typedef int InfoType;
typedef struct
{
int no;//顶点编号
InfoType info;//顶点其她信息
} VertexType;//顶点类型
调试过程中还就是出现了一些拼写错误,经检查后都能及时修正。有些就是语法设计上得小错误,比如一些参变量得初始值设置错误,使得程序调试出错。在小组讨论分析后纠正了这些结果,并尽量改进了算法得性能,减小时间复杂度。
将邻接矩阵g转换成邻接表G,输出邻接矩阵g,输出邻接表G得算法时间复杂度都就是O(n^2)。
{int adjvex;
struct ANode *nextarc;
InfoType info;
} ArcNode;
typedef int Vertex;
typedef struct Vnode//邻接表头结点得类型
{Vertex data;
ArcNode *firstarc;//指向第一条弧
} VNode;
通过这次实验,对图得存储方法有了更深刻得印象。
(四)测试结果
测试结果:
(1)有向图G得邻接矩阵为
0 1 0 4
0 0 9 2
3 5 8 0
0 0 6 0
(2)图G得邻接矩阵转换成得邻接表为:
0:1 3
1:2 3
2:0 1 2
3:2
(5)用户手册
不需要输入参数
(6)附录
源程序
#include<stdio、h>
{
int adjvex;//该弧得终点位置
struct ANode *nextarc;//指向下一条弧得指针
InfoType info;//该弧得相关信息,这里用于存放权值
} ArcNode;
typedef int Vertex;
typedef struct Vnode//邻接表头结点得类型
{
Vertex data;//顶点信息
void MatToList(MGraph g,ALGraph *&G)将邻接矩阵g转换成邻接表G
void DispMat(MGraph g)输出邻接矩阵g
void DispAdj(ALGraph *G)输出邻接表G
int OutDegree(ALGraph *G,int v)求图中每个顶点得出度
(三)调试分析
//输出邻接表G
{
int i;
ArcNode *p;
for (i=0;i<G>n;i++)
{
p=G>adjlist[i]、firstarc;
if (p!=NULL) printf("%3d: ",i);
while (p!=NULL)
{
printf("%3d",p>adjvex);
typedef VNode AdjList[MAXV];//AdjList就是邻接表类型
typedef struct
{AdjList adjlist;//邻接表
int n,e;
} ALGraph;//图得邻接表类型
2、主程序得流程以及各程序模块之间得层次调用关系,函数得调用关系图:
3、列出各个功能模块得主要功能及输入输出参数
《数据结构》
实验报告
题目:图
一、实现图得邻接矩阵与邻接表存储
(一)需求分析
对于下图所示得有向图G,编写一个程序完成如下功能:
1.建立G得邻接矩阵并输出之
2.由G得邻接矩阵产生邻接表并输出之
3.再由2得邻接表产生对应得邻接矩阵并输出之
(二)系统设计
1、本程序中用到得所有抽象数据类型得定义;
typedef struct
typedef struct//图得定义
{
int edges[MAXV][MAXV];//邻接矩阵
int vexnum,arcnum;//顶点数,弧数
VertexType vexs[MAXV];//存放顶点信息
} MGraph;//图得邻接矩阵类型
typedef struct ANode//弧得结点结构类型
ArcNode *firstarc;//指向第一条弧
} VNode;
typedef VNode AdjList[MAXV];//AdjList就是邻接表类型
typedef struct
{
AdjList adjlБайду номын сангаасst;//邻接表
int n,e;//图中顶点数n与边数e
} ALGraph;//图得邻接表类型
p>adjvex=j;
p>info=g、edges[i][j];
p>nextarc=G>adjlist[i]、firstarc;//将*p链到链表后
G>adjlist[i]、firstarc=p;
}
G>n=n;G>e=g、arcnum;
}
void DispMat(MGraph g)
//输出邻接矩阵g
for (i=0;i<n;i++)//检查邻接矩阵中每个元素
for (j=n1;j>=0;j)
if (g、edges[i][j]!=0)//邻接矩阵得当前元素不为0
{
p=(ArcNode *)malloc(sizeof(ArcNode));//创建一个结点*p
void MatToList(MGraph g,ALGraph *&G)//将邻接矩阵g转换成邻接表G
{
int i,j,n=g、vexnum;//n为顶点数
ArcNode *p;
G=(ALGraph *)malloc(sizeof(ALGraph));
for (i=0;i<n;i++)//给邻接表中所有头结点得指针域置初值
{int no;
InfoType info;
} VertexType;//顶点类型
typedef struct//图得定义
{int edges[MAXV][MAXV];
int vexnum,arcnum;
VertexType vexs[MAXV];
} MGraph;//图得邻接矩阵类型
typedef struct ANode//弧得结点结构类型
{
int i,j;
for (i=0;i<g、vexnum;i++)
{
for (j=0;j<g、vexnum;j++)
if (g、edges[i][j]==INF)
printf("%3s","∞");
else
printf("%3d",g、edges[i][j]);
printf("\n");
}
}
void DispAdj(ALGraph *G)
#include<malloc、h>
#defineMAXV 100//最大顶点个数
#define INF 32767 //INF表示∞
typedef int InfoType;
typedef struct
{
int no;//顶点编号
InfoType info;//顶点其她信息
} VertexType;//顶点类型
调试过程中还就是出现了一些拼写错误,经检查后都能及时修正。有些就是语法设计上得小错误,比如一些参变量得初始值设置错误,使得程序调试出错。在小组讨论分析后纠正了这些结果,并尽量改进了算法得性能,减小时间复杂度。
将邻接矩阵g转换成邻接表G,输出邻接矩阵g,输出邻接表G得算法时间复杂度都就是O(n^2)。
{int adjvex;
struct ANode *nextarc;
InfoType info;
} ArcNode;
typedef int Vertex;
typedef struct Vnode//邻接表头结点得类型
{Vertex data;
ArcNode *firstarc;//指向第一条弧
} VNode;
通过这次实验,对图得存储方法有了更深刻得印象。
(四)测试结果
测试结果:
(1)有向图G得邻接矩阵为
0 1 0 4
0 0 9 2
3 5 8 0
0 0 6 0
(2)图G得邻接矩阵转换成得邻接表为:
0:1 3
1:2 3
2:0 1 2
3:2
(5)用户手册
不需要输入参数
(6)附录
源程序
#include<stdio、h>
{
int adjvex;//该弧得终点位置
struct ANode *nextarc;//指向下一条弧得指针
InfoType info;//该弧得相关信息,这里用于存放权值
} ArcNode;
typedef int Vertex;
typedef struct Vnode//邻接表头结点得类型
{
Vertex data;//顶点信息
void MatToList(MGraph g,ALGraph *&G)将邻接矩阵g转换成邻接表G
void DispMat(MGraph g)输出邻接矩阵g
void DispAdj(ALGraph *G)输出邻接表G
int OutDegree(ALGraph *G,int v)求图中每个顶点得出度
(三)调试分析
//输出邻接表G
{
int i;
ArcNode *p;
for (i=0;i<G>n;i++)
{
p=G>adjlist[i]、firstarc;
if (p!=NULL) printf("%3d: ",i);
while (p!=NULL)
{
printf("%3d",p>adjvex);
typedef VNode AdjList[MAXV];//AdjList就是邻接表类型
typedef struct
{AdjList adjlist;//邻接表
int n,e;
} ALGraph;//图得邻接表类型
2、主程序得流程以及各程序模块之间得层次调用关系,函数得调用关系图:
3、列出各个功能模块得主要功能及输入输出参数
《数据结构》
实验报告
题目:图
一、实现图得邻接矩阵与邻接表存储
(一)需求分析
对于下图所示得有向图G,编写一个程序完成如下功能:
1.建立G得邻接矩阵并输出之
2.由G得邻接矩阵产生邻接表并输出之
3.再由2得邻接表产生对应得邻接矩阵并输出之
(二)系统设计
1、本程序中用到得所有抽象数据类型得定义;
typedef struct
typedef struct//图得定义
{
int edges[MAXV][MAXV];//邻接矩阵
int vexnum,arcnum;//顶点数,弧数
VertexType vexs[MAXV];//存放顶点信息
} MGraph;//图得邻接矩阵类型
typedef struct ANode//弧得结点结构类型
ArcNode *firstarc;//指向第一条弧
} VNode;
typedef VNode AdjList[MAXV];//AdjList就是邻接表类型
typedef struct
{
AdjList adjlБайду номын сангаасst;//邻接表
int n,e;//图中顶点数n与边数e
} ALGraph;//图得邻接表类型
p>adjvex=j;
p>info=g、edges[i][j];
p>nextarc=G>adjlist[i]、firstarc;//将*p链到链表后
G>adjlist[i]、firstarc=p;
}
G>n=n;G>e=g、arcnum;
}
void DispMat(MGraph g)
//输出邻接矩阵g