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

更新时间:2024-06-21 15:10:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

邻接矩阵的生成

一、实验目的

了解邻接矩阵的定义和其基本概念以及构建方式。 二、实验内容

1、根据已知图形的内容输入相关参数生成邻接矩阵; 2、用C语言编程来实现此算法。用下面的实例来调试程序:

三、使用环境

Xcode编译器,编写语言C。 四、编程思路

邻接矩阵表示的是顶点与边的关系,因此需要一个一维数组Vertex[]来保存顶点的相关信息,一个二维数组Edges[][]来保存边的权植,因为C语言二维数组的输出需要用循环语句,因此为了方便,构造一个输出函数Out,用来打印数组各元素的数值。

第 1 页 共 1 页

五、调试过程 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(\,&(G->Vertex[i]));//保存到数组中 }

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

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

for(k=0;kEdgeNum;k++) {

getchar();

printf(\这是第 %d 个边:\,k+1);

scanf(\,&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;//迭代数

第 2 页 共 2 页

for(j=0;jVertexNum;j++) {

printf(\,G->Vertex[j]); } //第一行输出顶点信息

printf(\);

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

printf(\,G->Vertex[i]); for(j=0;jVertexNum;j++) {

if(G->Edges[i][j]==MAXVALUE) //如果权是最大值就输出MAX printf(\); else

printf(\,G->Edges[i][j]);//否则就输出权值 }

printf(\); } }

int main() {

Graph G; int i,j;//迭代数

//输入顶点数目和边的数目

printf(\输入顶点数目和边的数目,例如1,2:\);

scanf(\,&G.VertexNum,&G.EdgeNum);//保存顶点和边的数目 for(i=0;i

for(j=0;j

G.Edges[i][j]=MAXVALUE;//设置各元素的值为最大值 Create(&G);//创建邻接矩阵 printf(\邻接矩阵为 :\\n\); Out(&G);//输出邻接矩阵 getchar(); return 0; }

2.运行窗口:

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

第 3 页 共 3 页

输出为:

所以连通分支如下:

第 4 页 共 4 页

本文来源:https://www.bwwdw.com/article/52i3.html

Top