图的存储结构C++实现

C++简单的图存储 第一次写博客,格式什么的就不太拘谨,以后会慢慢调整。本文解决的问题: 1.如何在C++中进行图的存储,以及对图进行一些简单操作废话不多说,直接上干货。我的图存储主要有3个类:Graph 图类 Vertex 点类 Edge 边类其中点在图中用数组的形式存储(因为一般情况下,简单的图点数一般不会太多,这里设置一个maxnum = 100常量足够解决一般图的存储问题),边在点类中用vec 阅读详情

图结构作为一种比线性表和树更为复杂的数据结构,任意两个数据元素之间都有可能相关。在离散数学中有图论一章,就是专门研究图的性质的。

目录

邻接矩阵表示法

 邻接表表示法

图的遍历(邻接表的实现)

不足之处


数据的逻辑结构是非线性的图结构,一个节点可能有多个前驱、多个后继;

从存储结构上来说,只有链式存储结构,没有顺序存储结构。但是,可以通过一个邻接矩阵表示两结点之间的连接关系。

图的具体分为:无向图、有向图、无向网、有向网

邻接矩阵表示法

 

#pragma once
#include<iostream>
using namespace std;

const int MaxInt = 32767;
const int MVNum = 10;
typedef char Elemtype;

typedef enum { DG, DN, UDG, UDN } GraphKind;//创建一个枚举类型GraphKind
//DG:有向图      DN:有向网      UDG:无向图       UDN:无向网


class AMGraph
{

public:
	AMGraph(GraphKind k);
	void Create();//创建网or图
	int LocateVex(const Elemtype s);//定位邻接矩阵中的1或者权值的位置
	void Printarcs();//打印邻接矩阵


private:
	GraphKind kind;
	Elemtype vexs[MVNum];//创建一个顶点表
	int arcs[MVNum][MVNum];//邻接矩阵
	int vex_num;//当前的顶点数
	int arc_num;//当前的边数

};

AMGraph::AMGraph(GraphKind k)
{ 
	this->kind = k; 
	this->vex_num = 0;
	this->arc_num = 0;
}


void AMGraph::Create()
{
	cout << "输入总顶点数:"; cin >> this->vex_num;
	cout << "输入总边数:"; cin >> this->arc_num;
	cout << "初始化顶点表!" << endl;  //也就是说输入点的信息
	//初始化一下这个矩阵
	for (int i = 0; i < this->vex_num; i++)
	{
		cout << "请输入第" << i + 1 << "个点的信息:";
		cin >> vexs[i];
	}
	for (int i = 0; i < this->vex_num; i++)
	{
		for (int j = 0; j < this->vex_num; j++)
		{
			if (this->kind == 0 || this->kind == 2)
				this->arcs[i][j] = 0;
			else
				this->arcs[i][j] = MaxInt;
		}
	}
	//正式构建邻接矩阵
	for (int i = 0; i < this->arc_num; i++)
	{
		Elemtype s1, s2;
		int val=1;
		int locate1=-1, locate2=-1;
		cout << "输入第一个点:" << endl; cin >> s1;
		cout << "输入第二个点:" << endl; cin >> s2;
		if (this->kind == 1 || this->kind == 3)
		{
			cout << "输入权值:"; cin >> val;
		}
		locate1 = this->LocateVex(s1);
		locate2 = this->LocateVex(s2);
		if (locate1 == -1 || locate2 == -1)
			return;
		switch (this->kind)
		{
		case  DG:
			this->arcs[locate1][locate2] = 1;
			break;
		case DN:
			this->arcs[locate1][locate2] = val;
			break;
		case UDG:
			this->arcs[locate1][locate2] = 1;
			this->arcs[locate2][locate1] = 1;
			break;
		case UDN:
			this->arcs[locate1][locate2] = val;
			this->arcs[locate2][locate1] = val;
			break;
		default:
			break;
		}
	}
}



int AMGraph::LocateVex(const Elemtype s)
{
	/*cout << typeid(this->vexs[0]).name() << endl;
	cout << typeid(s).name() << endl;*/
	for (int i = 0; i < this->vex_num; i++)
	{
		if (s == this->vexs[i])
			return i;//如果找到喽 就返回在顶点表中的下标
	}
	return -1;//如果没找到,就返回-1
}

void AMGraph::Printarcs()
{
	for (int i = 0; i < this->vex_num; i++)
	{
		for (int j = 0; j < this->vex_num; j++)
		{
			cout << this->arcs[i][j] << "\t";
		}
		cout << endl;
	}
}

 邻接表表示法

图中的每一个顶点建立一个单链表,把与结点相邻接的顶点放在链表中,顶点(表头节点)组成一个线性表,表头结点的指针域指向边表,时间复杂度O(n+e)(e:边数)

查看源图像

 关于邻接表表示法的相关理论可参考诸多数据结构与算法书籍,下面给出邻接表的表示方法:

#pragma once
#include<iostream>
using namespace std;

typedef char Elemtype;
const int MaxInt = 32767;

typedef enum { DG, DN, UDG, UDN } GraphKind;//创建一个枚举类型GraphKind
//DG:有向图      DN:有向网      UDG:无向图       UDN:无向网

//可以通过邻接表实现四种kind的计算机存储结构
//邻接表的三部分定义:边结点、存放顶点的头结点线性表、图的类型

class ArcNode//定义了边结点
{
public:
	int adjvex;//邻接顶点所在表中下标
	int weight;//边权重
	ArcNode* nextarc;//指向下一条边的指针
};
class VNode
{
public:
	Elemtype data;
	ArcNode* firstarc;
};
class ALGraph
{
public:
	ALGraph(GraphKind k);
	void CreateALG();//创建邻接表
	int LocateVex(const Elemtype s);
private:
	VNode* vertices;
	GraphKind kind;
	int vex_num;
	int arc_num;
};

ALGraph::ALGraph(GraphKind k)
{
	this->vex_num = 0;
	this->arc_num = 0;
	this->kind = k;
	this->vertices = nullptr;
}


void ALGraph::CreateALG()
{
	cout << "输入总顶点数:"; cin >> this->vex_num;
	cout << "输入总边数:"; cin >> this->arc_num;
	//初始化顶点表
	this->vertices = new VNode[vex_num];
	for (int i = 0; i < this->vex_num; i++)
	{
		cout << "输入顶点表中的数据域:"; cin >> vertices[i].data;
		vertices[i].firstarc = nullptr;
	}
	//边结点的链接
	for (int i = 0; i < this->arc_num; i++)
	{
		Elemtype s1, s2;
		int locate1 = -1, locate2 = -1;
		cout << "输入第1点:" << endl; cin >> s1;
		cout << "输入第2点:" << endl; cin >> s2;
		locate1 = this->LocateVex(s1);
		locate2 = this->LocateVex(s2);
		int val=1;
		if (this->kind == 1 || this->kind == 3)//如果创建的是有向网\无向网就输入对应的权值
		{
			cout << "输入权值:"; cin >> val;
		}
		ArcNode* p;
		p = new ArcNode;
		p->weight = val;
		p->adjvex = locate2;
		p->nextarc = this->vertices[locate1].firstarc;
		this->vertices[locate1].firstarc = p;
		if (this->kind == 2 || this->kind == 3)//如果无向图/无向网
		{
			ArcNode* p1;
			p1 = new ArcNode;
			p1->weight = val;
			p1->adjvex = locate1;
			p1->nextarc = this->vertices[locate2].firstarc;
			this->vertices[locate2].firstarc = p1;
		}
	}
}

int ALGraph::LocateVex(const Elemtype s)
{
	for (int i = 0; i < this->vex_num; i++)
	{
		if (s == this->vertices[i].data)
			return i;//如果找到喽 就返回在顶点表中的下标
	}
	return -1;//如果没找到,就返回-1
}

 邻接表缺点:对于图来说,需要开辟两个空间来记录两个结点之间的关系,这对于后续的删除以及图的遍历都是不利的,为了克服这一缺点,引入邻接多重表;

对于有向图/网来说,一个结点只能记录他的出度,却不能记录入度,因此引入了十字链表,求得顶点的入度和出度.

图的遍历(邻接表的实现)

下面的两段程序是针对邻接表进行的深度优先搜索(DFS)和广度优先搜索(BFS),下面的程序是邻接表程序上又加了几个成员函数

以邻接表为表示方法,深度优先算法,更像是看到一个结点,一看他没被访问过,就立马就再从表结点出发,以该结点为出度边,递归访问,这样来回得穿梭于表头结点和边结点之间,从图形上是说是“一条道走到黑”;

而广度优先算法,更像是从邻接表上起始点出发,一条道走到黑,路上把所有遍历的且之前未访问过的结点,放到容器中,走到黑之后,再掉头从queue中输出队列元素,继续再邻接表上一条道走到黑,不用递归噢,走到黑之后,让容器再给你吐出来一个起始点。

类.hpp

#pragma once
#pragma once
#include<iostream>
#include<queue>
using namespace std;

typedef char Elemtype;
const int MaxInt = 32767;

typedef enum { DG, DN, UDG, UDN } GraphKind;//创建一个枚举类型GraphKind
//DG:有向图      DN:有向网      UDG:无向图       UDN:无向网

//可以通过邻接表实现四种kind的计算机存储结构
//邻接表的三部分定义:边结点、存放顶点的头结点线性表、图的类型

class ArcNode//定义了边结点
{
public:
	int adjvex;//邻接顶点所在表中下标
	int weight;//边权重
	ArcNode* nextarc;//指向下一条边的指针
};
class VNode
{
public:
	Elemtype data;
	ArcNode* firstarc;
};
class ALGraph
{
public:
	ALGraph(GraphKind k);
	void CreateALG();//创建邻接表
	void InitArry();//标志数组置空
	void DFS_AL(const Elemtype s);//输入时图中的某一个结点,深度优先遍历,采用邻接表表示,本质上操作对象还是表头结点表,而非依靠边结点输出
	void BFS_AL(const Elemtype s);//广度优先访问连通图,还有构建一个标志数组
private:
	int LocateVex(const Elemtype s);//根据输入的s值,确定要连接的两个点在表头结点中的位置


	VNode* vertices;
	GraphKind kind;
	int vex_num;
	int arc_num;
	int* visitedDFS;
	queue<int> Q;
};

ALGraph::ALGraph(GraphKind k)
{
	this->vex_num = 0;
	this->arc_num = 0;
	this->kind = k;
	this->vertices = nullptr;

}


void ALGraph::CreateALG()
{
	//初始化顶点表
	cout << "输入总顶点数:"; cin >> this->vex_num;
	cout << "输入总边数:"; cin >> this->arc_num;
	//初始化标志数组
	this->visitedDFS = new int[vex_num];
	for (int j = 0; j < this->vex_num; j++)
	{
		visitedDFS[j] = 0;//默认都没有访问过
	}
	//初始化表头
	this->vertices = new VNode[vex_num];
	for (int i = 0; i < this->vex_num; i++)
	{
		cout << "输入顶点表中的数据域:"; cin >> vertices[i].data;
		vertices[i].firstarc = nullptr;
	}
	//边结点的链接
	for (int i = 0; i < this->arc_num; i++)
	{
		Elemtype s1, s2;
		int locate1 = -1, locate2 = -1;
		cout << "输入第1点:" ; cin >> s1;
		cout << "输入第2点:" ; cin >> s2;
		locate1 = this->LocateVex(s1);
		locate2 = this->LocateVex(s2);
		int val = 1;
		if (this->kind == 1 || this->kind == 3)//如果创建的是有向网\无向网就输入对应的权值
		{
			cout << "输入权值:"; cin >> val;
		}
		ArcNode* p;
		p = new ArcNode;
		p->weight = val;//头插法
		p->adjvex = locate2;
		p->nextarc = this->vertices[locate1].firstarc;
		this->vertices[locate1].firstarc = p;
		if (this->kind == 2 || this->kind == 3)//如果无向图/无向网
		{
			ArcNode* p1;
			p1 = new ArcNode;
			p1->weight = val;
			p1->adjvex = locate1;
			p1->nextarc = this->vertices[locate2].firstarc;
			this->vertices[locate2].firstarc = p1;
		}
	}
}

int ALGraph::LocateVex(const Elemtype s)
{
	for (int i = 0; i < this->vex_num; i++)
	{
		if (s == this->vertices[i].data)
			return i;//如果找到喽 就返回在顶点表中的下标
	}
	return -1;//如果没找到,就返回-1
}

void ALGraph::InitArry()//为了防止一次程序中反复遍历图,所以提供给标志数组置0,这样的话,进行多次遍历的时候主程序都将其置空一次;
{
	for (int i = 0; i < this->vex_num; i++)
	{
		this->visitedDFS[i] = 0;
	}
}

void ALGraph::DFS_AL(const Elemtype s)
{//邻接表的展现方式
	cout << s << "\t";//麻溜把结点输出来;
	int locate = this->LocateVex(s);
	this->visitedDFS[locate] = 1;
	ArcNode* p;
	p = this->vertices[locate].firstarc;
	while (p)
	{
		int index = p->adjvex;//获得点的索引下标
		if (!this->visitedDFS[index])
			this->DFS_AL(this->vertices[p->adjvex].data);
		p = p->nextarc;
	}
}

void ALGraph::BFS_AL(const Elemtype s)//不需要遍历,但需要一个队列容器
{
	cout << s << "\t";
	int index = this->LocateVex(s);
	this->visitedDFS[index] = 1;
	this->Q.push(index);
	while (!Q.empty())
	{
		int num = Q.front();
		Q.pop();
		ArcNode* p;
		p = this->vertices[num].firstarc;
		while (p)
		{
			if (this->visitedDFS[p->adjvex] == 0)
			{
				cout << this->vertices[p->adjvex].data << "\t";
				this->visitedDFS[p->adjvex] = 1;
				Q.push(p->adjvex);
			}
			p = p->nextarc;//如果被访问过了,还要继续去顺着边结点寻找噢,所以这个程序不能放在if语句中
		}
	}
	cout << endl;
}

主程序.cpp

#include <iostream>
#include"图邻接表实现.hpp"
using namespace std;

int main()
{ 
	ALGraph K(UDG);
	K.CreateALG();
	K.DFS_AL('A');
	cout << endl;
	K.InitArry();
	K.BFS_AL('A');

	system("pause");
	return 0;
}

 结果:答案不唯一,由于子图在遍历的时候没有顺序,所以先访问A之后访问B或C都行

原型:

 

不足之处

这里动态开辟的空间都没释放噢!

实验六 图的基本储存(C++) 1.实验目的 (1)理解图的基本概念、图的结构特性; (2)掌握邻接表表示图的基本方法; (3)掌握连通图遍历的基本的方法。 2.实验内容 (1)用邻接表存储一个图 G。分别设计实现下列要求的算法: 求出图 G 中每个顶点的出度; 求出图 G 中出度最大的一个顶点,输出该顶点的编号; 计算图 G 中出度为 0 的顶点数。 (2)编写一个实现连通图 G 的深度优先遍历(从顶点 V0 出发,以邻接矩阵为 储结构)的递归和非递归函数,分别用这两种方法对图进行深度优先遍历,比较遍历结果。 3.代码 3.1 #ifn 阅读详情

相关推荐

避坑指南:CST粒子工作室Track Solver常见的5个参数设置错误

本文深入剖析了CST粒子工作室中Track Solver在电子枪仿真时常见的5个关键参数设置错误,包括空间电荷模型选择、发射源定义、材料边界处理、监视器配置及求解器稳定性设置。通过对比错误与正确做法,帮助用户避开陷阱,确保粒子追踪仿真的物理准确性与数值稳定性,从而获得更精准的电子枪仿真结果。

dapp9builder的博客 487

C++如何处理图的存储方式

C++如何处理图的存储方式博主介绍邻接矩阵邻接表链式前向星**1、AcWing方式(纯数组)**Acwing图的存储方式案例复杂度 博主介绍 🌊 作者主页:苏州程序大白 🌊 作者简介:🏆优快云人工智能域优质创作者🥇,苏州市凯捷智能科技有限公司创立人,目前合作公司富士康、歌尔等 邻接矩阵 适用: 稠密图,就是说点数的平方与边数接近的情况,换句话说就是边特别多。 不适用: 稀疏图,就是点数的平方与边数差的特别多,边数少,但点数多,就不行了,因为空间占用太大了。 实现代码 #include <bits

苏州程序大白的博客 2795

PySpark 本地开发环境搭建与实践

本文详细介绍了 PySpark 本地开发环境的搭建过程,包括 JDK、Hadoop、Anaconda、PySpark 的安装以及 Pycharm 工程的创建。同时,深入讲解了代码编写、本地开发案例(如 WordCount、处理特殊分隔符、读取 hdfs 数据、获取外部变量)、Spark 程序的监控和 local 模式下结果文件数量问题等内容。通过掌握这些知识和技能,读者可以在 Windows 本地环境中高效地进行 PySpark 开发,处理大规模数据,解决实际业务中的数据分析和处理问题。

天冬忘忧的博客 3013

根据char* 图像数据指针存储图像

//存图 bool SaveImage(LONG ImageWidth, LONG ImageHeight, CHAR* pImageData, BSTR bstrImageSavePath) { m_Buffers-&gt;Save(&quot;D:\\66669999.bmp&quot;,&quot;-format bmp&quot;,1,2); CImage pImage; if(!pImage.IsNull())

2034

VLA模型(具身智能入门十)

Vision Language Action(VLA)模型VLA模型是机器人领域的“感知-理解-执行”一体化框架,通过Transformer架构融合视觉、语言、动作模态,核心目标是让机器人在自然语言驱动下,自主完成复杂操控任务。其定义的核心在于“跨模态统一”与“具象化行动”——不仅能“看懂”“听懂”,更能“做出正确的动作”,是实现通用机器人智能的关键方向。提供通用序列建模骨架,让视觉、语言、动作能以“序列”形式统一处理;ViT将视觉输入转换为序列特征,提供“看”的能力;LLMs。

weixin_39699362的博客 9928

基于STM32的智能工业机器人臂控制系统

工业机器人臂是智能制造的核心组件,广泛应用于装配、焊接、搬运等任务。基于STM32微控制器的机器人臂控制系统,通过集成伺服电机驱动、运动规划算法和实时通信功能,实现对多轴机械臂的精确控制与路径规划。本设计通过STM32实现了一套智能工业机器人臂控制系统,集成了高效的运动规划算法和实时控制功能。机器人臂系统根据输入的目标位置(如工件坐标),通过运动学计算生成动作轨迹,利用伺服电机驱动器控制关节运动。该系统广泛应用于工业自动化场景,如汽车制造中的零件装配、电子产品生产中的元件焊接以及物流系统中的物料搬运。

stm32d1219的博客 2568

用c语言实现存储和读取图片文件,C++实现单张图片读取和保存

使用C++实现对单张图片的读取和保存,C语言可以参考,比较简单。#includeusing namespace std;void main(void){//保存输入图像文件名和输出图像文件名char InImgName[10];char OutImgName[10];//图像数据长度int length;//文件指针FILE* fp;//输入要读取的图像名cout<cin>>In...

weixin_39713805的博客 956

PINN求解PDE

PINN求解Dirichlet泊松方程 泊松方程引入 −Δu=f,x∈Ω=(0,1)2-\Delta u=f,x \in \Omega=(0,1)^2−Δu=f,x∈Ω=(0,1)2 u=g,x∈∂Ωu=g,x \in \partial \Omegau=g,x∈∂Ω import torch import time import numpy as np import matplotlib.pyplot as plt import torch.nn as nn def UU(X, order,prob):

forrestguang的博客 3804

C++:图的存储结构及实现

图是一种复杂的数据结构,任意两个顶点之间都可能存在边,所以无法通过顶点的存储位置反应顶点之间的邻接关系,因此,图没有顺序存储结构。信息以及顶点之间的信息。无论采用什么方法存储图,都要完整、准确地表示这两方面的信息。下面介绍两种常用的存储结构——和。一般情况下,图越稠密,邻接矩阵的空间效率越高;而对稀疏图使用邻接表存储,则能获得较高的空间效率。邻接矩阵比邻接表的时间代价高。

han2205277149的博客 966

桌面运维工程师面试题汇总(高频完整版)

岗位,覆盖:电脑硬件、系统安装与故障、网络、办公软件、安全、AD域、打印机、日常排错、服务意识。

老韩的Linux云计算架构师进阶之路 921

基于ESP32的智能停车场管理系统开发

智能停车场管理系统通过引入物联网(IoT)技术,实现对停车场内车辆的实时监控、空闲车位的管理、车辆的入场与出场控制等功能,大大提高了停车场的利用率和管理效率。通过集成物联网技术、云平台以及先进的传感器和执行器,系统不仅能实时监控停车场的车位状态,还能提供更好的用户体验。本文将介绍如何基于ESP32开发一个智能停车场管理系统,涵盖系统架构、硬件选择、软件开发以及最新技术的应用,帮助开发者实现高效的智能停车管理。ESP32的代码主要负责处理车位传感器的数据,控制LED指示灯的状态,以及与云平台进行数据交互。

2201_76125393的博客 912

c++ 实现图的存储结构—邻接矩阵

#include #include using namespace std; #define Max_Vex 256 template class MatUnDirectedGraph { public: MatUnDirectedGraph() { num=5; VNodes=new VNode[num]; nodecount=0; edgeco

Y_23k_bug的专栏 2022

COSMO-RS理论:流体相热力学预测的核心模型与技术突破

摘要:COSMO-RS模型通过量子化学计算分子表面电荷分布,实现了从微观量子尺度到宏观化工过程的热力学预测。该模型基于介电连续介质理论,将分子表面片段化处理,通过σ-剖面描述电荷分布,并计算片段间的静电失配能和氢键能。其核心算法通过自洽化学势方程求解活度系数,克服了传统模型依赖实验参数的局限。随着技术进步,模型引入了高阶描述符和色散力修正,提升了预测精度。在药物研发、化工分离等领域广泛应用,但仍存在对长程有序结构预测不足等局限性。该模型为复杂体系的热力学性质预测提供了重要理论工具。

ASKCOS博客 974

图的存储结构(邻接矩阵与邻接表)及其C++实现

一、图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:                    G=(V,E) 其中:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合。 注: 在线性表中,元素个数可以为零,称为空表; 在树中,结点个数可以为零,称为空树; 在图中,顶点个数不能为零,但可以没有边。 二、图的基本术语 略。 三、图的遍历   图的...

qq_36623595的博客 1723

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

图的存储结构的实现(C/C++实现)

存档: 1 #include &lt;stdio.h&gt; 2 #include &lt;stdlib.h&gt; 3 #define maxv 10 4 #define max 10 5 typedef char elem; 6 typedef int elemtype; 7 #include "queue.h" 8 #include "mgraph.h" ...

weixin_33888907的博客 811

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C++数据结构之图的存储结构——邻接矩阵和邻接表实现无向图

本文通过两种方式:1.邻接矩阵2.邻接表 构建无向图,其中对邻接表构建无向图有详细的介绍、流程图、和相关代码图示。

m0_56398315的博客 8452

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

图的存储结构——邻接矩阵(算法简介/c++实现)

邻接矩阵   用二维数组表示顶点间相邻关系的矩阵 无穷大的计算机存储:用宏MAX_VALUE(  计算机允许的、大于所有边上权值的数 )   邻接矩阵 const int MAXSIZE = 10 ; template class MGraph{ public: MGraph(T a[], intn , int e ); void DFS(int v);/

jiayi797的专栏 2044

8647 实现图的存储结构

SCAU数据结构OJ第六章8647 实现图的存储结构

callmeggyh的博客 353

C++ 图的实现

图可以说是算法与数据结构中十分重要的一个部分,然而对于图的实现,还是有一点点繁琐,今天参考清华大学出版社《数据结构》一书进行了一些回顾,记录于此。 本文并不对基本概念进行过多探讨,而着眼于实现。基于对途中边集的存储有邻接矩阵以及邻接表两种主要形式。本文将着重实现三个类:Graph基类,包含大量的virtual函数以待在派生类中实现;Graph的派生类Graphmtx(邻接矩阵实现图的存储)、Gr

杂的文 1万+

8、图的存储结构 -- 邻接矩阵存储方法(C++代码实现)

1.邻接矩阵是非对称矩阵尽需为G.arcs[i][j]赋值。无向网可以生成无向图、有向网、有向图;1.初始化邻接矩阵时,w均为0;采用临界矩阵表示法创建无向网。2.创建邻接矩阵时,w为1。

czy940115的博客 549

SCNU_数据结构作业_实验6 图的算法与应用(第一题)

1、 邻接矩阵(验证实验【必做】) 以lab5_1.cpp为基础,参考课本180页-182页的内容,建立无向图的邻接矩阵存储结构,对建立的无向图进行深度优先遍历和广度优先遍历。请把答案代码直接补充在源文件中。课本178页图6-7的输入和输出样张如下图所示。 #include <iostream> using namespace std; const int MaxSize = 10; //图中最多顶点个数 int visited[MaxSize]={0};//对全局的点初

weixin_51262605的博客 349
上一篇: 二叉树数据结构及哈夫曼树(C++代码)
下一篇: 哈希链表的实现C++
Worthwhile_HUST
博客等级 码龄5年 53粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值