本文共 2234 字,大约阅读时间需要 7 分钟。
图的邻接矩阵操作算法实现如下:
#define _CRT_SECURE_NO_WARNINGS#include测试结果:#include #include #define MAXV 5 //最大顶点个数#define LIMITLESS 9999 //表示无穷大“ ∞ ”typedef char InfoType [10];//顶点类型typedef struct VERTEXTYPE { int num; //顶点编号 InfoType info; //顶点其他信息} VertexType;//图的定义:邻接矩阵typedef struct MGRAPH{ int n; //顶点数 int e; //边数 int deges[MAXV][MAXV]; //邻接矩阵 VertexType vesx[MAXV]; //顶点类型} MGraph;//创建图的邻接矩阵void CreateMGraph(MGraph *G){ int i; int j; int k; int w; if(G == NULL) { return; } printf("输入顶点数和边数:"); scanf("%d %d" , &(G->n) , &(G->e)); printf("输入顶点信息:\n"); for(i = 0; i < G->n; i++) { scanf("%d %s" , &(G->vesx[i].num), &(G->vesx[i].info)); } for(i = 0; i < G->n; i++) { for(j = 0; j < G->n; j++) { //邻接矩阵的对角线值为0 if(j == i) { G->deges[i][j] = 0; } //其他全部初始化为无穷大“ ∞ ” else { G->deges[i][j] = LIMITLESS; } } } //记录每条边的权值 printf("请输入 i , j , w 的值:\n"); for(k = 0; k < G->e; k++) { scanf("%d %d %d" , &i , &j , &w); G->deges[i][j] = w; }}//输出图的邻接矩阵void DispMGraph(MGraph *G){ int i; int j; if(G == NULL) { return; } printf("顶点数:%d\n边数:%d\n" , G->n , G->e); printf("%d个顶点的信息:\n" , G->n); //输出顶点信息 for(i = 0; i < G->n; i++) { printf("%5d %5d %s\n" , i , G->vesx[i].num , G->vesx[i].info); } printf("各顶点相连的情况:\n"); printf("\t"); for(j = 0; j < G->n; j++) { printf("[%d]\t" , j); } printf("\n"); for(i = 0; i < G->n; i++) { printf("[%d]\t" , i); for (j = 0; j < G->n; j++) { if(G->deges[i][j] == LIMITLESS) { printf("∞\t"); }else { printf("%d\t" , G->deges[i][j]); } } printf("\n"); }}int main(void){ MGraph *g = NULL; g = (MGraph *)malloc(sizeof(MGraph)); //创建图结构 CreateMGraph(g); //输出图结构 DispMGraph(g); printf("\n"); return 0;}
这是一个有向图,从测试的结果来看,和我们期望的52篇中图5中的邻接矩阵中的是一样的。