图论实现邻接矩阵实验报告C语言

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;iVertexNum;i++)

{

getchar();

printf("这是第%d 个顶点的名字:",i+1);

scanf("%c",&(G->Vertex[i]));//保存到数组中

}

//输入每个边的起始顶点和权值

printf("输入每个边的起始顶点和权值,例如A,B,1:\n");

for(k=0;kEdgeNum;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;jVertexNum;j++)

{

printf("\t%c",G->Vertex[j]);

} //第一行输出顶点信息

printf("\n");

for(i=0;iVertexNum;i++)

{

printf("%c",G->Vertex[i]);

for(j=0;jVertexNum;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.运行窗口:

在运行窗口输入:输出为:

则输出:

所以连通分支如下:

相关文档
最新文档