您的位置:首页 > 理论基础 > 数据结构算法

【自己动手写数据结构】 -- 有向带权图的邻接矩阵存储的简单实现

2013-04-09 13:39 447 查看
/*
* 带权图的邻接矩阵存储实现

*
* 当G = <V,E>是一个带权图时,G的邻接矩阵中若顶点Vi到顶点Vj
* 之间存在边,则将[i,j]赋值为此边的权值;若不存在边,则将[i,j]
* 赋值为无穷大;而[i,i]的值为0
*/
#include<stdio.h>
//定义10000为无穷大
#define MAXSIZE 10000
//定义最大的顶点数为30
#define vertexNum 30
//定义顶点的数据类型
typedef char vertexType;

typedef struct node {
vertexType vertex[vertexNum];
int deges[vertexNum][vertexNum];
//图中的顶点数和边数
int verNum;
int edgeNum;
}matrix;

//创建该图的邻接矩阵存储结构
void createMatrix(matrix *gra) {
//先输入图的顶点数和边数
printf("输入图的顶点数和边数:\n");
scanf("%d%d", &(gra->verNum), &(gra->edgeNum));
//抵消上一步输入时的换行动作
getchar();
printf("图中各顶点为:\n");
//依次输入各个顶点
for(int i = 0; i < gra->verNum; i++) {
scanf("%c", &gra->vertex[i]);
}
for(int i = 0; i < gra->verNum; i++) {
for(int j = 0; j < gra->verNum; j++) {
//一个点到自身的边值为0,其他点之间的边值初始化为无穷大
if(i == j) gra->deges[i][j] = 0;
else gra->deges[i][j] = MAXSIZE;
}
}
printf("输入各边值(格式:源顶点 目的顶点 边值):\n");
int row, col, value;
for(int k = 0; k < gra->edgeNum; k++) {
scanf("%d%d%d", &row, &col, &value);
//将此点的边值信息输入矩阵中
gra->deges[row][col] = value;
}
}

//打印出该图的信息
void printGraph(matrix gra) {
printf("\n图中各顶点为:\n");
for(int i = 0; i < gra.verNum; i++) {
printf("%c ", gra.vertex[i]);
}
printf("\n");
printf("\n邻接矩阵为:\n");
//输出邻接矩阵,实际上是一个二维数组
for(int i = 0; i < gra.verNum; i++) {
for(int j = 0; j < gra.verNum; j++) {
printf("%d\t", gra.deges[i][j]);
}
printf("\n");
}
}

int main(void) {
matrix graph;
createMatrix(&graph);
printGraph(graph);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: