【自己动手写数据结构】 -- 有向带权图的邻接矩阵存储的简单实现
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); }
相关文章推荐
- 自己动手实现数据结构——排序算法1(冒泡、插入、归并、简单选择)(C++实现)
- 【自己动手写数据结构】 -- 图的邻接表存储实现
- 【自己动手写数据结构】 -- 简单顺序表的实现
- 【自己动手写数据结构】 -- 简单顺序栈的实现
- 自己动手系列——实现一个简单的LinkedList
- 自己动手实现简单权限控制
- 自己动手实现数据结构——AVL树(C++实现)
- 【自己动手写数据结构】 -- 单链表的实现
- 自己动手写CPU之第七阶段(4)——验证简单算术操作指令实现效果
- 自己动手实现数据结构——排序算法2 (希尔、快速、堆)(C++实现)
- 自己动手实现简单权限控制
- 自己动手写CPU之第九阶段(5)——实现加载存储指令1(修改译码阶段)
- 【自己动手写数据结构】 -- 循环队列的表示与实现
- 自己动手实现简单的Vector
- 自己动手实现最简单版本的Spring AOP
- 自己动手写CPU之第九阶段(5)——实现加载存储指令3(修改访存阶段)
- 自己动手实现一个简单的string类(三)
- 自己动手简单实现CountDownLatch
- 《自己动手写框架4》:分布式锁的简单实现
- 自己动手写简单的web应用服务器(4)—利用socket实现文件的下载