邻接矩阵的生成
一、实验目的
了解邻接矩阵的定义和其基本概念以及构建方式。 二、实验内容
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;i
getchar();
printf(\这是第 %d 个顶点的名字:\,i+1); scanf(\,&(G->Vertex[i]));//保存到数组中 }
//输入每个边的起始顶点和权值
printf(\输入每个边的起始顶点和权值,例如A,B,1:\\n\);
for(k=0;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;j
printf(\,G->Vertex[j]); } //第一行输出顶点信息
printf(\);
for(i=0;i
printf(\,G->Vertex[i]); for(j=0;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 页