图:邻接矩阵表示法创建无向图并深度优先搜索遍历
无向图样式:
邻接矩阵法类似于用数组储存,一个一维数组储存顶点信息,还有一个二维数组储存邻接矩阵
用邻接矩阵进行无向图的创建过程:
一,输入总顶点数和边数(几个点,几条边)
eg:如图所示即为8点,9边。
二,依次输入点的信息存入顶点表中(每个点一个名字)
eg:如图即可以写为ABCDEFGH。
三,初始化邻接矩阵,将每个权值初始化为最大值或零(每个边赋一个值)
eg:上图最开始初始化为32767,即表示,所有连接的两点之间距离都是32767
四,构造邻接矩阵。
依次输入每条边依附的顶点和其权值,(输入值后,先确定两个顶点在图中的位置,然后将权赋给两点之间边)
eg:输入AB1,即代表A点B点之间的距离为1;输入AC2,即代表A点C点之间的距离为2.
邻接矩阵表示法深度优先搜索遍历过程:
遍历过程类似于递归过程。
先从你输入的呢一点开始遍历(因为刚开始给全部都初始化值了,所以默认是任何一点与所有点都连接);
已经遍历的点visited[i]赋值为一,代表已经遍历。
碰到不是默认值的数,即为真正有连接的点,若该点已经被遍历,则继续向下,否则跳转到该点。
等到某一点遍历过后,再返回到上一层
eg:
如果上图从A点开始遍历,默认的话,A与其余所有点都有连接,权值为32767.若赋值AB1,AC1。
第一步:看AB是否连接,若AB连接,且B点尚未遍历,则跳转到B点
第二步:B点再开始遍历,首先是BA,虽然BA连接,但是A点已经遍历,所以找下一个真正连接的点,即为D,
第三步:因为BD连接且D尚未遍历,所以从D开始,再以D为起始点,开始遍历
。。。。。。。。。。。
(根据代码可知遍历过程都是从i=0到i= A.point,所以每次都是按照ABCDEFGH进行遍历)
运行截图:
代码:
#include<iostream>
using namespace std;#define pointMax 100
#define MaxInt 32767struct AMgroup
{char VTchart[pointMax]; //顶点表int AMchart[pointMax][pointMax]; //邻接矩阵int point, vert; //点,边
};int AMlocate(AMgroup A, char x)
{for (int i = 0; i < A.point; i++) //依次输入点的信息{if (A.VTchart[i] == x){return i;break;}}
}void CreatAM(AMgroup &A)
{cout << "输入邻接矩阵顶点数:"; //第一步cin >> A.point;cout << "输入邻接矩阵边数:";cin >> A.vert;getchar();char a[100];cout << "输入点的信息:"; //第二步gets_s(a);for (int i = 0; i < A.point; i++) //依次输入点的信息{A.VTchart[i] = a[i];}for (int i = 0; i < A.point; i++) //初始换邻接矩阵,边的权值均设为最大 //第三步{for (int j = 0; j < A.point; j++){A.AMchart[i][j] = MaxInt;}}cout << endl;char v1, v2; int len;for (int i = 1; i <= A.vert; i++) //构造邻接矩阵{cout << "输入第"<<i<<"条边的两个顶点以及权值:"; //第四步cin >> v1 >> v2 >> len;int m, n;m = AMlocate(A, v1);n = AMlocate(A, v2);A.AMchart[m][n] = A.AMchart[n][m] = len;}
}int visited[100] = { 0 };
void DFS(AMgroup &A, int v)
{cout << A.VTchart[v];visited[v] = 1;for (int i = 0; i < A.point; i++){if (A.AMchart[v][i] != MaxInt && visited[i] != 1){DFS(A, i);}}
}int main()
{AMgroup *A = new AMgroup;CreatAM(*A);int m;cout << "\n从第几个点开始遍历:";cin >> m;DFS(*A,m);getchar();
}
图:邻接矩阵表示法创建无向图并深度优先搜索遍历相关推荐
- 数据结构与算法A实验六图论---7-10 邻接矩阵表示法创建无向图
采用邻接矩阵表示法创建无向图G ,依次输出各顶点的度. 输入格式: 输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数. 输入第二行为顶点的信息,每个顶点只能用一 ...
- 图——邻接表法创建无向图算法。走起。。。。
一.算法步骤: 1.先输入无向图的的总顶点数和边数. 2.输入每个顶点的信息,并把所有顶点结点中的firstarc置为NULL. 3.输入与每条边相关联的两个顶点. 4.找到两个顶点的位置即在顶点结点 ...
- 【数据结构】采用邻接矩阵表示法创建无向网、无向图、有向图、有向网
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一.无向网(∞/权值,对称) 1.思路 2.代码 3.运行结果 三.其他 (1)无向图(0/1,对称) (2)有向网(∞/权值, ...
- 邻接表法创建无向图(C语言)
题目 本题要求建立一个无向图,采用邻接表做为存储结构. 例如: 输入信息为:第一行给出图的顶点数n和边数e.第二行给出n个字符,表示n个顶点的数据元素的值.后面是e行,给出每一条边的两个顶点编号. 输 ...
- C语言邻接表表示法创建无向图并输出
C语言邻接表表示法创建无向图并输出 邻接表是图的一种链式存储结构,对图的每个顶点建立一个单链表,单链表第一个结点存放顶点信息,其余存放有关边信息. 邻接表由表头结点表和边表组成. 邻接表存储结构 #i ...
- 一个含n个顶点和e条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时间复杂度为
一个含n个顶点和e条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时间复杂度为( ) A.O(n) ...
- 算法6.6 采用邻接表表示图的深度优先搜索遍历
算法6.6 采用邻接表表示图的深度优先搜索遍历 代码实现 #pragma once #include <iostream>using namespace std;//图的邻接表存储表示 # ...
- 图的深度优先搜索遍历
深度优先搜索遍历 深度优先搜索遍历类似与树的先序遍历,过程如下 (1) 从图中的某个顶点v出发,访问v (2) 找出刚访问过的顶点的第一个未被访问的邻接点,访问该节点.以该节点为新顶点,重复此步骤,直 ...
- 数据结构--图--图的数组存储表示,深度优先搜索遍历和广度优先搜索遍历
图有四种存储结构:数组,邻接表,十字链表,邻接多重表.下面以数组为存储结构来实现图的深度优先搜索遍历和广度优先搜索遍历.其中广度优先搜索遍历中有用到STL中的queue,注意头文件的包含.具体代码如下 ...
最新文章
- ubuntu下codeblocks起步
- 阶段1 语言基础+高级_1-3-Java语言高级_02-继承与多态_第1节 继承_7_继承中方法的覆盖重写_注意事项...
- linux 64位 安装qt creator .run,Qt Creator安装
- 11.find 查找并复制文件
- 前端页面闪动(vue+ele 表格分页)
- 技术水平真的很重要!技术详细介绍
- Dreaming to Distill: Data-free Knowledge Transfer via DeepInversion
- python 怎么实现3d 动画_python – 使用matplotlib的3D动画
- 用友通新建账套显示不能登入到服务器,用友通打不开,出现登录失败
- win10找不到打印机_新版Windows 10的外设Bug:重启后找不到USB打印机端口
- 一个Tab切换类,求指导
- 许多大学生喜欢玩计算机游戏英语作文,2016年12月大学英语四级作文范文:大学生玩游戏...
- python进行数据预处理(最大最小值规范化、零均值规范化、剔除奇异值、去噪、曲线拟合)
- R语言reshape包加载出现环境参数错误的解决方式
- Aligenie语音开发平台(天猫精灵)的对接记录
- java计算机毕业设计购物网站设计(附源码、数据库)
- 调用office web 365接口实现在线预览word文档,PDF,PPT
- 换IP后(电脑换了地方),虚拟机无法联网
- 关于 office 即点即用 和 Window Install 和 Project 安装心得
- Spring boot + Mybatis动态多数据源实现