图论实现邻接矩阵实验报告C语言
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
邻接矩阵的生成
一、实验目的
了解邻接矩阵的定义和其基本概念以及构建方式。
二、实验内容
1、根据已知图形的内容输入相关参数生成邻接矩阵;
2、用C语言编程来实现此算法。用下面的实例来调试程序:
三、使用环境
Xcode编译器,编写语言C。
四、编程思路
邻接矩阵表示的是顶点与边的关系,因此需要一个一维数组Vertex[]来保存顶点的相关信息,一个二维数组Edges[][]来保存边的权植,因为C语言二维数组的输出需要用循环语句,因此为了方便,构造一个输出函数Out,用来打印数组各元素的数值。
五、调试过程
1.程序代码:
#include
#define VERTEX_MAX 26//最大顶点数目
#define MAXVALUE 32767//顶点最大权值
//定义图
typedef struct
{
char Vertex[VERTEX_MAX]; //保存顶点信息
int Edges[VERTEX_MAX][VERTEX_MAX]; //保存边的权值
int isTrav[VERTEX_MAX]; //是否遍历
int VertexNum ; //顶点数目
int EdgeNum; //边的数目
}Graph;
//创建邻接矩阵
void Create(Graph *G)
{
int i,j,k,weight; //i,j,k分别为迭代数,weight是权值
char start,end; //边或者弧的起始顶点
printf("输入各个顶点的信息:\n"); //输入各个顶点的信息
for(i=0;i
{
getchar();
printf("这是第%d 个顶点的名字:",i+1);
scanf("%c",&(G->Vertex[i]));//保存到数组中
}
//输入每个边的起始顶点和权值
printf("输入每个边的起始顶点和权值,例如A,B,1:\n");
for(k=0;k
{
getchar();
printf("这是第%d 个边:",k+1);
scanf("%c,%c,%d",&start,&end,&weight);//起点,终点,权值
for(i=0;start!=G->Vertex[i];i++);//查找起点
for(j=0;end!=G->Vertex[j];j++); //查找终点
G->Edges[i][j]=weight;//保存权值
G->Edges[j][i]=weight;
}
}
void Out(Graph *G) //输出邻接矩阵
{
int i,j;//迭代数
for(j=0;j
{
printf("\t%c",G->Vertex[j]);
} //第一行输出顶点信息
printf("\n");
for(i=0;i
{
printf("%c",G->Vertex[i]);
for(j=0;j
{
if(G->Edges[i][j]==MAXVALUE) //如果权是最大值就输出MAX printf("\tMAX");
else
printf("\t%d",G->Edges[i][j]);//否则就输出权值
}
printf("\n");
}
}
int main()
{
Graph G;
int i,j;//迭代数
//输入顶点数目和边的数目
printf("输入顶点数目和边的数目,例如1,2:");
scanf("%d,%d",&G.VertexNum,&G.EdgeNum);//保存顶点和边的数目
for(i=0;i for(j=0;j G.Edges[i][j]=MAXVALUE;//设置各元素的值为最大值 Create(&G);//创建邻接矩阵 printf("邻接矩阵为:\n"); Out(&G);//输出邻接矩阵 getchar(); return0; } 2.运行窗口: 在运行窗口输入:输出为: 则输出: 所以连通分支如下: