图邻接矩阵表示

1.图的邻接矩阵表示法

  在图的邻接矩阵表示法中:

  ① 用邻接矩阵表示顶点间的相邻关系

  ② 用一个顺序表来存储顶点信息

2.图的邻接矩阵(Adacency Matrix)

  设G=(V,E)是具有n个顶点的图,则G的邻接矩阵是具有如下性质的n阶方阵:

【例】下图中无向图G 5 和有向图G 6 的邻接矩阵分别为A l 和A 2 。

3.网络的邻接矩阵

  若G是网络,则邻接矩阵可定义为:

其中:

w ij 表示边上的权值;

∞表示一个计算机允许的、大于所有边上权值的数。

【例】下面带权图的两种邻接矩阵分别为A 3 和A 4 。

4.图的邻接矩阵存储结构形式说明

#define MaxVertexNum l00 //最大顶点数,应由用户定义

typedef char VertexType; //顶点类型应由用户定义

typedef int EdgeType; //边上的权值类型应由用户定义

typedef struct{

VextexType vexs[MaxVertexNum] //顶点表

EdeType edges[MaxVertexNum][MaxVertexNum];

//邻接矩阵,可看作边表

int n,e; //图中当前的顶点数和边数

}MGragh;

注意:

  ① 在简单应用中,可直接用二维数组作为图的邻接矩阵(顶点表及顶点数等均可省略)。

  ② 当邻接矩阵中的元素仅表示相应的边是否存在时,EdgeTyPe可定义为值为0和1的枚举类型。

  ③ 无向图的邻接矩阵是对称矩阵,对规模特大的邻接矩阵可压缩存储。

  ④ 邻接矩阵表示法的空间复杂度S(n)=0(n 2 )。

5.建立无向网络的算法。

void CreateMGraph(MGraph *G)

{//建立无向网的邻接矩阵表示

int i,j,k,w;

scanf("%d%d",&G->n,&G->e); //输入顶点数和边数

for(i=0;i<G->n;i++) //读人顶点信息,建立顶点表

G->vexs[i]=getchar();

for(i=0;i<G->n;i++)

for(j=0;j<G->n;j++)

G->edges[i][j]=0; //邻接矩阵初始化

for(k=0;k<G->e;k++){//读入e条边,建立邻接矩阵

scanf("%d%d%d",&i,&j,&w);//输入边(v i ,v j )上的权w

G->edges[i][j]=w;

G->edges[j][i]=w;

}

}//CreateMGraph

  该算法的执行时间是0(n+n 2 +e)。由于e<n 2 ,算法的时间复杂度是0(n 2 )。

时间: 2024-11-05 18:52:15

图邻接矩阵表示的相关文章

数据结构(C实现)------- 图的邻接矩阵表示

[本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020] 图的邻接表表示法类似于树的孩子链表表示法,就是对图中的每个顶点vi,将所有邻接于vi的顶点链接成一个单链表,这个单链表就称为顶点vi的邻接表.在邻接表中有两种结点结构:头结点(vexdata,firstarc).表结点(adjvex,nextarc). 其中,表头结点由顶点域(vexdata)和指向第一条邻接边的指针域(firstarc)构成:表结点由邻接点域(adjvex

看数据结构写代码(35) 图的邻接矩阵表示法

杂谈:最近清明小长假,好好的放松了一下.节前 和 节后 都有点 松懈.不好,不好.贵在坚持.加油. 图的邻接矩阵表示法是用 两个数组 来表示 图的数据结构.一个是顶点数组,另一个是邻接矩阵数组.邻接矩阵 里存放着 顶点的关系. 用邻接矩阵表示图,在 看 顶点之间 是否有边,或者 求顶点的度等操作时比较简单.但空间浪费巨大,在插入,删除 顶点 和边 操作时 需要 移动大量数据,造成不便.所以在插入删除比较多,节点数比较多的时候 不宜 使用这种结构. 下面上代码: 源代码网盘地址:点击打开链接 //

图的邻接矩阵表示方法以及遍历

下面的程序可以用来创建有向图,有向网,无向图,无向网.对于图来说如果来个顶点之间存在边,则在矩阵中用1表示,无边则用0表示.在网络中,边是对应权值的. 图的遍历可以分为深度优先遍历和广度优先遍历. 深度优先遍历的思想是,选择某个未被访问的顶点并访问,然后从该顶点出发,选择第一个和该顶点邻接的未被访问的顶点进行访问.在该过程中可以设置一个标识数组flags[]来标识各个顶点是否被访问到. 广度优先搜索的思想是,选择某个未被访问的顶点并访问,然后依次访问该顶点所以的邻接顶点,对于每次被访问的顶点都对

poj 3259 Wormholes (BELLman—FOrd算法)(邻接矩阵表示)

http://poj.org/problem?id=3259 之前一开始 ,没做出来,搁置了好几天才看见bug所在.所以今天a掉了 ,把代码贴出来,这个使用邻接矩阵表示的 ,下一篇用邻接表可以提高效率. #include<iostream> #include<queue> #include<stdio.h> #include<string.h> using namespace std; const int INF=600; int G[INF][INF];

【算法与数据结构】图 -- 邻接表

/************************************************************************ 边(弧)结点 -------------------------- |adjvex | info | nextarc | -------------------------- adjvex:邻接点域,该点在图中的位置 info :相关信息,比如可以保存从某顶点到该点的权值 nextac:指向下一个与该点有相同邻接点的顶点 顶点结点 ---------

java 数据结构 图中使用的一些常用算法 图的存储结构 邻接矩阵:图的邻接矩阵存储方式是用两个数组来标示图。一个一位数组存储图顶点的信息,一个二维数组(称为邻接矩阵)存储图中边或者弧的信息。 设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: 实例如下,左图是一个无向图。右图是邻接矩阵表示:

以下内容主要来自大话数据结构之中,部分内容参考互联网中其他前辈的博客. 图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通过表示为G(V,E),其中,G标示一个图,V是图G中顶点的集合,E是图G中边的集合. 无边图:若顶点Vi到Vj之间的边没有方向,则称这条边为无项边(Edge),用序偶对(Vi,Vj)标示. 对于下图无向图G1来说,G1=(V1, {E1}),其中顶点集合V1={A,B,C,D}:边集合E1={(A,B),(B,C),(C,D),(D,A),(A,C)}: 有向图:若

邻接矩阵表示有向带权图

#include <stdio.h> #include <stdlib.h> #include <string.h> typedef char VertexType[5]; //存储顶点值 #define MaxSize 50 #define INIT 10000 typedef struct //邻接矩阵,存储弧的信息 {     int adj; }ArcNode,AdjMatrix[MaxSize][MaxSize]; typedef struct   //图的类

数据结构中图的邻接矩阵表示方法

#include<iostream> using namespace std; typedef char vertextype; typedef int edgetype; #define maxvex 100 #define infinity 1000 class MGraph{ public: vertextype vexs[maxvex]; edgetype arc[maxvex][maxvex]; int numvertexs,numedges;//图的顶点数目和图的边的数目 MGra

图的表示-邻接矩阵表示

描述 图的邻接矩阵(Adjacency Matrix)表示是采用二维数组的方式.通过邻接矩阵可以立刻看出两顶点之间是否存在一条边,只需要检查邻接矩阵重行i和列j是否是非零值.对于无向图,邻接矩阵是对称的.下图是摘自<算法:C语言实现> 代码实现 #include <iostream> using namespace std; const int VERTEX_NUM = 20; // 顶点的最大数 typedef int graph_weight_t; // 边的权值类型 可以为