图的邻接矩阵c语言表示(无向网)---《数据结构》算法7.2
2016-02-18 13:33
351 查看
邻接矩阵是图的一种表示法,构造具有n个顶点和e条边的无向网G的时间复杂度为(n^2+e*n),代码如下:
#include<stdio.h> #define infinity 2000000000 #define MAX_VERTEX_NUM 100 typedef enum{DG,DN,UDG,UDN} GraphKind; typedef struct { int vexs[MAX_VERTEX_NUM]; int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; int vexnum,arcnum; GraphKind kind; }MGraph; int LocateVex(MGraph G,int v){ for(int i=0;i<G.vexnum;i++){ if(G.vexs[i]==v)return i; } } void CreateUDN(MGraph &G){ int i,j,k; G.kind=UDN;//图的类型为无向网 printf("输入顶点个数和弧的个数:\n"); scanf("%d%d",&G.vexnum,&G.arcnum);//输入顶点个数,弧额条数,以及是否有关于弧的相关信息 printf("输入各个顶点的名称(数字):\n"); for(i=0;i<G.vexnum;i++) scanf("%d",&G.vexs[i]);//输入各个顶点,这里顶点的数据类型默认为int类型 for(i=0;i<G.vexnum;i++) for(j=0;j<G.vexnum;j++) G.arcs[i][j]=0;//初始化图 printf("输入各条弧的两个顶点和权值:\n"); for(k=0;k<G.arcnum;k++){ int v1,v2,weight; scanf("%d %d %d",&v1,&v2,&weight);//输入弧的两个顶点 i=LocateVex(G,v1);j=LocateVex(G,v2);//寻找两个顶点在矩阵中的位置 G.arcs[i][j]=weight; G.arcs[j][i]=G.arcs[i][j];//置<v1,v2>的对称弧<v2,v1> } } void Print(MGraph G){ for(int i=0;i<G.vexnum;i++){ for(int j=0;j<G.vexnum;j++) printf("%d ",G.arcs[i][j]); printf("\n"); } } int main(){ MGraph G; CreateUDN(G); Print(G); return 0; }
相关文章推荐
- 渗透技术一瞥(图)
- 图片引发的溢出危机(图)
- C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
- C++实现图的邻接表存储和广度优先遍历实例分析
- jQuery圆形统计图开发实例
- 手机短信轰炸(图)
- C语言实现图的遍历之深度优先搜索实例
- python数据结构之图的实现方法
- ASP.Net页面生成饼图实例
- 基于Java实现的图的广度优先遍历算法
- RelativeLayout浅谈
- 图
- Ext Scheduler Web资源甘特图控件
- 键盘码 图
- 图(1)——图的定义和基本概念
- 图(2)—— 邻接矩阵表示法
- 图(2)—— 邻接矩阵表示法
- 图(3)——邻接链表法
- BFS实现从上往下打印二叉树
- 数据结构-08-集合(Set)-哈希表(Hash)-图(Map)