图的存储结构----邻接矩阵

邻接矩阵的数组表示法

在这里插入图片描述

无向图的邻接矩阵

在这里插入图片描述

无向图的邻接矩阵特点

在这里插入图片描述

顶点i的度

在这里插入图片描述

求顶点i的所有邻接点

在这里插入图片描述

有向图的邻接矩阵

在这里插入图片描述

求顶点i的入度

在这里插入图片描述

求顶点i的出度

在这里插入图片描述

如何判断顶点i到顶点j是否存在边

在这里插入图片描述

网图的邻接矩阵

网图定义:每条边带有权的图叫做网
在这里插入图片描述

邻接矩阵的无向图类

在这里插入图片描述

邻接矩阵中图的构造函数在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

示范

在这里插入图片描述

#include<iostream>
using namespace std;
const int MAX = 10; //图的最大顶点个数为10
typedef char DataType;
class Graph 
{
    
    
private:
	//边的个数
	int arcNum;
	//顶点个数
	int vertexNum;
	//定义一个存放顶点的一位数组
	DataType vertex[MAX];
	//定义一个存放顶点间的边关系的二维数组
	int arc[MAX][MAX];
public:
	//v[]数组存放用户输入的一维数组的顶点数据,n表示顶点个数,e是边的个数
	Graph(DataType v[], int n, int e);
   //定义一个输出函数
	void display()
	{
    
    
		/*arc[1][3] = 1;
		arc[3][1] = 1;*/
		for (int i = 0; i <vertexNum; i++)
		{
    
    
			for (int j = 0; j < vertexNum; j++)
			{
    
    
				cout << arc[i][j]<<" ";
			}
			cout << endl;
		}
	}
};
//有参构造函数的实现
Graph::Graph(DataType v[], int n, int e)
{
    
    
	//初始化顶点个数
	vertexNum = n;
	//初始化边的个数
	arcNum = e;
	//初始化顶点数组
	for (int i = 0; i < MAX; i++)
		vertex[i] = v[i];
	//初始化边数组
	for (int i = 0; i < MAX; i++)
		for (int j = 0; j < MAX; j++)
			arc[i][j] = 0;
	//由用户来决定,哪两个顶点之间存在边
	int vi=0, vj=0;
	for (int i = 0; i < arcNum; i++)
	{
    
    
		cin >> vi >> vj;//输入边依附的两个顶点编号
		//这是无向图的边初始化标志
		arc[vi][vj] = 1;//有边的标志
		arc[vj][vi] = 1;
	}
}
//测试-------------------
void test()
{
    
    
	DataType v[5] = {
    
     'V0','V1','V2','V3' };
	Graph p(v, 4, 4);
	//输出测试
	p.display();
}
int main()
{
    
    
	
	test();
	system("pause");
	return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_53157173/article/details/114991730