邻接矩阵 建图

来源:互联网 发布:淘宝的xbox手柄 编辑:程序博客网 时间:2024/06/08 18:50
#include<stdio.h>#include<stdlib.h>#define MAXVEX 100#define INFINITY 65535// 邻接矩阵 建图 // 一个一维数组 存储顶点信息 // 一个二维数组 存储边及其权重信息// 带权重的 数组 自身到自身不存在设置为 0  // 其它有边存在设置为 相应权重 // 剩下 无边的 设置为 无穷大 (INFINITY)  
//此处为建立无向图typedef int EdgeType; //权重 类型 typedef char VertexType;// 顶点类型 typedef struct GNode* MGraph;struct GNode{VertexType Vex[MAXVEX]; // 节点 EdgeType Edge[MAXVEX][MAXVEX];};MGraph Initialize(MGraph G, int v) //  图初始化 {int i, j;for(i = 0; i < v; i++ ){for(j = 0; j < v; j++ ){if(i == j){G->Edge[i][j] = 0;// 不存在自己到自己的边  }else{G->Edge[i][j] = INFINITY;}}}}MGraph CreateGraph(int Vnum){MGraph G = (MGraph)malloc(sizeof(struct GNode));if(G == NULL){printf("Error");return NULL;}int Enum, v, e;Initialize(G, Vnum); printf("请输入顶点信息 : \n");for(v = 0; v < Vnum; v++ ){scanf("%c",&G->Vex[v]); // 字符间不要有空格 }int k;printf("请输入边数:\n");fflush(stdin); //防止 上面读取信息 错误 scanf("%d",&Enum);printf("请输入各边及其权值 :\n");int i, j, w; //(i, j)代表边  w代表权重 for(e = 0; e < Enum; e++ ){scanf("%d %d %d",&i, &j, &w);//中间 空格 G->Edge[i][j] = w;G->Edge[j][i] = G->Edge[i][j]; //无向图 对称性 }return G;}void Print(MGraph G, int Vnum)//打印邻接矩阵{int i, j;for(i = 0; i < Vnum; i++ ){for(j = 0; j < Vnum; j++ ){if(i == j)printf(" 0");else if(G->Edge[i][j] == INFINITY){printf(" #"); }else{printf("%2d",G->Edge[i][j]);}}printf("\n");}}int main(){MGraph G;int Vnum;printf("请输入顶点个数: \n");scanf("%d",&Vnum);G = CreateGraph(Vnum);printf("建图结果:\n");Print(G, Vnum);return 0;}

原创粉丝点击