图的建立——邻接矩阵
通过邻接矩阵的方式建立图
邻接矩阵(Adjacency Matrix)的存储结构就是通过一维数组存储图中顶点的信息,用矩阵表示图中各个顶点的的临界关系,而矩阵通过一个二维数组表示。
图的分类
在矩阵中的表示方法
在无向图中矩阵的表示
无向网中矩阵的表示
存储顶点信息的结构
存储图的信息时,要通过结构体来定义数据类型,以无向网为例定义如下:
#define MAX_VEX 100 // 图中含有顶点的最多个数
#define INF 65535 //如果两个顶点之间不可达,用无穷表示距离
struct Graph{char vexs[MAX_VEX]; //代表顶点信息的名称int arc[MAX_VEX][MAX_VEX]; //两个顶点之间的权值int numvex; // 表示顶点的个数int numarc; // 边的个数
};
图信息的初始化
void CreateGraph(Graph &G){int vi, vj, w;cout << "please enter the number of vertexes and arcs : \n";cin >> G.numvex >> G.numarc; //输入顶点与边的个数for(int i = 0; i < G.numvex; i++){ //为每个顶点初始化信息printf("Please enter the NO.%d name of vex : ",i+1);cin >> G.vexs[i];}for(int i = 0; i < G.numvex; i++){ //初始化顶点之间的权值 默认为无穷for(int j = 0; j < G.numvex ;j++){G.arc[i][j] = INF;}}cout << endl;for(int i = 0; i < G.numarc; i++){ //根据边的条数,为每一条边赋值cout<< "Enter the subscripts and weights from vertex vi to vertex vj : ";cin >> vi >> vj >> w;G.arc[vi][vj] = w; //在无向网中满足图对称性,即Vi-Vj 和Vj-Vi的距离相等,实际就是一条路径G.arc[vj][vi] = w;}
}
完整实现过程:
#include <iostream>
#include <cstdio>
#define MAX_VEX 100
#define INF 65535using namespace std;
struct Graph{char vexs[MAX_VEX];int arc[MAX_VEX][MAX_VEX];int numvex,numarc;
};
void CreateGraph(Graph &G){int vi, vj, w;cout << "please enter the number of vertexes and arcs : \n";cin >> G.numvex >> G.numarc;for(int i = 0; i < G.numvex; i++){printf("Please enter the NO.%d name of vex : ",i+1);cin >> G.vexs[i];}for(int i = 0; i < G.numvex; i++){for(int j = 0; j < G.numvex ;j++){G.arc[i][j] = INF;}}cout << endl;for(int i = 0; i < G.numarc; i++){cout<< "Enter the subscripts and weights from vertex vi to vertex vj : ";cin >> vi >> vj >> w;G.arc[vi][vj] = w;G.arc[vj][vi] = w;}
}
void DispalyGraph(Graph G){for(int i = 0; i < G.numvex; i++) cout << G.vexs[i] << " ";cout << endl;for(int i = 0; i < G.numvex; i++){for(int j = 0; j < G.numvex; j++){if(G.arc[i][j] == INF) printf("%6s", "∞");else printf("%6d", G.arc[i][j]);}cout << endl;}
}
int main(){Graph G;CreateGraph(G);DispalyGraph(G);return 0;
}
实现结果
以下面的无向网为例:
- 所有的顶点信息
顶点个数为9 边数为 16
边信息:
0 1 1
0 2 5
1 3 7
1 4 5
4 2 1
2 3 7
3 6 3
6 4 6
4 7 9
7 5 5
6 8 7
7 8 4
1 2 3
3 4 2
4 5 3
6 7 2
图的建立——邻接矩阵相关推荐
- 图的建立(邻接矩阵)与其深度优先和广度优先遍历
建立一个有向图或无向图,输入其顶点数,边数,并给出相应边的权值,输出该图对应的邻接矩阵,并用递归实现其深度优先遍历和用队列实现其广度优先遍历后的结果. 图的遍历 从给定图中任意指定的顶点(称为初始点) ...
- c语言 图的存储邻接矩阵,数据结构之---C语言实现图的数组(邻接矩阵)存储表示...
//图的数组(邻接矩阵)存储表示 #include #include #define MAX_VEX_NUM 50 typedef char VertexType; typedef enum { DG ...
- 图的存储 邻接矩阵+邻接表+链式前向星
图的存储 - 邻接矩阵 在树的问题中,邻接矩阵是空间.时间的极大浪费. 假设树的结点个数为 N = 100000. 建立邻接矩阵需要空间为 1e5*1e5 但是由于只有 N - 1 条边,所以在邻接矩 ...
- 图的存储-邻接矩阵和邻接表之间的相互转化
邻接矩阵和邻接表之间的相互转化,输出邻接矩阵和邻接表算法实现. 将文件保存为GraphBasicOperation.cpp文件,具体实现如下: #include <stdio.h> #in ...
- 图的建立、遍历及其应用(设图结点的元素类型为char,建立一个不少于8个顶点的带权无向图G,实现以下图的各种基本操作的程序)
实验目的:通过实验达到: ⑴ 理解和掌握图的基本概念.基本逻辑结构: ⑵ 理解和掌握图的邻接矩阵存储结构.邻接链表存储结构: ⑶ 理解和掌握图的DFS.BFS遍历操作的思想及其实现: ⑷ 加深对堆栈. ...
- 图的数组(邻接矩阵)存储结构
图是比较复杂的数据结构,它由顶点和顶点之间的弧或边组成.任何两个顶点之间都 可能存在弧或边.在计算机存储图时,只要能表示出顶点的个数及每个顶点的特征.每对 顶点之间是否存在弧(边)及弧(边)的特征,就 ...
- virtualenv在Ubuntu18.10(64位)中的用法(命令和图形化建立虚拟环境)
virtualenv吃系统版本,所以系统python3.6的对应的最高版本为ubuntu18.10 且celery部分功能不支持python3.7 而anaconda3太占用空间. 所以不要使用太新的 ...
- 图的存储 —— 邻接矩阵
图的结构比较复杂,任何两个节点之间都可能有关系. 图的存储分为顺序存储和链式存储. 顺序存储包括邻接矩阵和边集数组, 链式存储包括邻接表.链式前向星.十字链表和邻接多重表. 图的存储 -- 邻接矩阵 ...
- 链表、二叉树、图的建立与初始化
注:为了省去输入的麻烦,以下程序所用数据均从文件读取 1.链表建立与初始化 建立如下链表 建立一个名为data的txt文件,将此文件放在本程序所在文件夹目录下,文件内容为: #include < ...
最新文章
- OpenCV持久化(二)
- 深度学习引擎的终极形态是什么?
- python3 元组 tuple 操作
- bzoj1115: [POI2009]石子游戏Kam
- .NET6之MiniAPI(十九):NLog
- 如何摆脱「自我否定」状态
- LeetCode之Number Complement
- 递归函数就兔子数C语言,【C语言】求斐波那契(Fibonacci)数列通项(递归法、非递归法)...
- 移动应用开发商的生存之道
- 疑似Bug:简书安卓10.7首页搜索关键字屏蔽敏感词不彻底
- 学python有前途吗-python有前景吗
- zoj 2706 线段树
- Hadoop 1.x和Hadoop 2.x,Hadoop 1.x局限性和Hadoop 2.x YARN优点之间的区别
- Python转exe神器pyinstaller
- SpringCloudAlibaba电商项目实战
- 2010年中国十大网络电视排行榜(转)
- Leaving fence domain… found dlm lockspace /sys/kernel/dlm/rgmanager
- 【深入vue3+Typescript技术栈】2021 coderwhy大神新课高清百度网盘持续更新 王红元老师 腾讯课堂
- 比心app源码,获取系统时间
- 梅特勒电子天平维修触摸屏维修XS205