图的邻接矩阵存储结构
如上图,我们能够把v0标记为0,v1标记为1。。。。
并把联通的2点权值全设置为1,那么能够用邻接矩阵(右图)来表示
概念解析:
第一个邻接顶点:
我们以vo为例,第一个邻接顶点为V1(事实上也能够使V3,仅仅只是考虑计算机的存储顺序。我们找邻接顶点,通常是从v0扫描到v3,所以我们先在内存中扫描到v1)
下一个邻接顶点:
我们以v0为例。下一个邻接顶点就是v3(相同。事实上也能够使V1,仅仅只是考虑计算机的存储顺序。我们找下个邻接顶点,通常是从v2扫描到v3,之所以从v2扫描起,那是由于,V1已经是第一个邻接顶点了。那么下一个邻接顶点一定是在内存中存储在V1后的数据了)
无向图邻接矩阵的特点:
对角线权值是0
无向图矩阵关于斜线对称(有向图不正确称)
代码例如以下:
#include<iostream>
using namespace std;
#define VertexSize 10
typedef struct
{int weight[VertexSize][VertexSize]; //表示2个顶点之间的权值int edgenum; //表示图的边数目
}Graph;//初始化图
void Initiate_Graph(Graph *g,int n)
{int i,j;g->edgenum=0;for(i=0;i<n;i++)for(j=0;j<n;j++){if(i==j) g->weight[i][j]=0; //对角线表示顶点自己到自己。权值为0else g->weight[i][j]=0x7fff; //其它权值初始化为无限大}
}//插入边
void InsertEdge(Graph *g,int v,int w,int weight,int n)
{if(v<0 || v>=n||w<0||w>=n){cout<<"overflow!"<<endl;}g->weight[v][w]=weight;g->edgenum++;
}//取得点V的第一个临接顶点
int GetFirstVertex(Graph *g,int v,int n)
{if(v<0||v>=n){cout<<"overflow"<<endl;return -1;}int i;for(i=0;i<n;i++){if(( (g->weight[v][i])>0 )&&( (g->weight[v][i])<0x7fff) )return i;}return -1;}//取得顶v的下一个邻接顶点
int GetNextVertex(Graph *g,int v,int w,int n)
{if(v<0||v>=n||w<0||w>=n){cout<<"overflow"<<endl;return -1;}int i;for(i=w+1;i<n;i++){if( ((g->weight[v][i])>0 )&& ((g->weight[v][i])<0x7fff ))return i;}return -1;
}//删除边
void DeleteEdge(Graph *g,int v,int w,int n)
{if(v<0||v>=n||w<0||w>=n||v==w){cout<<"error"<<endl;}g->weight[v][w]=0x7fff;g->edgenum--;
}void PrintGraph(Graph *g,int n)
{int y,x,i;for(i=0;i<n;i++){y=GetFirstVertex(g,i,n);if(y==-1){cout<<"Vertex:"<<i<<"没有第一个邻接顶点"<<endl;}else{cout<<"Vertex:"<<i<<"第一个邻接顶点"<<y<<endl;x=GetNextVertex(g,i,y,n);if(x!=-1){cout<<"Vertex:"<<i<<"下一个邻接顶点"<<x<<endl;}else{cout<<"Vertex:"<<i<<"没有第二个邻接顶点"<<endl;}}}
}void main()
{Graph g;int n,edge;cout<<"请输入图的顶点个数:"<<endl;cin>>n;cout<<"请输入图的边个数"<<endl;cin>>edge;Initiate_Graph(&g,n);int i,p1,p2,weight;cout<<"请输入顶点-顶点-权值:"<<endl;for(i=0;i<edge;i++){cin>>p1>>p2>>weight;InsertEdge(&g,p1,p2,weight,n);}PrintGraph(&g,n);cout<<"输入须要删除的边:"<<endl;int e1,e2;cin>>e1>>e2;DeleteEdge(&g,e1,e2,n);cout<<"删除后边的数目为:"<<g.edgenum<<endl;system("pause");
}
图的邻接矩阵存储结构相关推荐
- 图的数组(邻接矩阵)存储结构
图是比较复杂的数据结构,它由顶点和顶点之间的弧或边组成.任何两个顶点之间都 可能存在弧或边.在计算机存储图时,只要能表示出顶点的个数及每个顶点的特征.每对 顶点之间是否存在弧(边)及弧(边)的特征,就 ...
- 数据结构-图-邻接矩阵-试在邻接矩阵存储结构上实现图的基本操作 matrix_insert_vertex 和matrix_insert_arc-icoding
邻接矩阵 试在邻接矩阵存储结构上实现图的基本操作 matrix_insert_vertex 和matrix_insert_arc,相关定义如下: typedef int VertexType;type ...
- 图的邻接矩阵存储和邻接表存储定义方法
一.邻接矩阵 #include <iostream> using namespace std; #define MaxVertexNum 100 //顶点最大数目//邻接矩阵存储结构 ty ...
- 图的邻接矩阵存储(简单代码实现)
说起来邻接矩阵,对于学过线性代数的同学理解起来非常简单 其实就是一个数字组成方阵,每一个数字都能有有意义的代表一些信息. 下面来看一个例子 如上图所示的图,使用邻接矩阵存储的话应该是下面的情况 由此可 ...
- 图解图库JanusGraph系列-一文知晓“图数据“底层存储结构(JanusGraph data model)
图解图库JanusGraph系列-一文知晓"图数据"底层存储结构(JanusGraph data model) 大家好,我是洋仔,JanusGraph图解系列文章,实时更新 图数据 ...
- 图的常见存储结构及各自的优缺点
以下说法均建立在简单图上,即无环无重复边的图. 本文将介绍图的常见存储结构及各自的优缺点 邻接矩阵 邻接表 十字链表 邻接多重表 边集数组 邻接矩阵 用两个数组来表示图:一个一维数组存储图中顶点信息, ...
- 图的邻接矩阵存储及遍历操作
第1关:图的邻接矩阵存储及求邻接点操作 任务描述 本关任务:要求从文件输入顶点和边数据,包括顶点信息.边.权值等,编写程序实现以下功能. 1)构造无向网G的邻接矩阵和顶点集,即图的存储结构为邻接矩阵. ...
- java对象底层原存储结构图解_图解图库JanusGraph系列-一文知晓“图数据“底层存储结构...
大家好,我是洋仔,JanusGraph图解系列文章,实时更新~ 图数据库文章总目录: 转载文章请保留以下声明: 一:存储模式 留言或私信我,邀请你加入"图数据库交流"微信群! 1. ...
- janusgraph整合mysql_图解图库JanusGraph系列-一文知晓“图数据“底层存储结构
527-7.jpg 大家好,我是洋仔,JanusGraph图解系列文章,实时更新~ 图数据库文章总目录: 版本:JanusGraph-0.5.2 转载文章请保留以下声明: 一:存储模式 留言或私信我, ...
最新文章
- mysql团队开发工具_最棒的10款MySQL GUI工具
- javaScript(1):基础部分
- 20170706xlVBA城中村改造汇总
- MongoDB limit 选取 skip跳过 sort排序 方法
- 12月10日习题答案大剖析!小伙伴们再接再厉
- Logistic Regression逻辑回归的损失函数与梯度下降训练
- RSA加密、解密、签名、校验签名
- MBProgressHUD的基本使用
- 《Microsoft SQL Server入门教程》第01篇 SQL Server 简介
- 计算机主机箱组装示意图,电脑主机组装图解
- 张钹院士:迈向第三代人工智能 |论文学习总结
- 电脑上怎么压缩GIF动图?简单好用的压缩工具分享给你
- Django测试开发平台搭建
- stopstart按钮怎么用_汽车Start-Stop启停技术简明讲解
- java.lang.ClassNotFoundException: sun . jdbc . odbc . JdbcOdbcDriver
- 划重点 iOS15正式发布, 全新的通知推送系统,你必须要知道
- python3抓取杭州房价信息
- Syslog服务器配置和日志转发
- 浪漫故事:常见HTTP状态码的另类解析
- 从0开始制作小游戏(一)