栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构-图(邻接矩阵)(c++实现)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构-图(邻接矩阵)(c++实现)

#include
using namespace std;


//无向图的邻接矩阵表示法


template
class map
{
public:
	map(T _data[],int len);
	~map();

	void print();

private:

	T* M;				//顶点表

	bool** arr;			//邻接矩阵 -- 有边true 无边false	 带权值的图可以用整型数组 数组中存放权值

	int length;			//记录元素数量

};


template
map::map(T _data[],int len) 
{ 
	//为表和矩阵开辟空间

	length = len - 1;							//数组中要留位置放结束符 '/0' 故长度比实际大1

	M = new T[length];

	arr = new bool* [length];

	for (int i = 0; i < length; i++)
	{
		M[i] = _data[i];
		arr[i] = new bool[length];
		for (int j = 0; j < length; j++) { arr[i][j] = false; }
	}

	//设置顶点间的边

	int quantity;		//记录边的数量

	cout << "输入边的数量:";

	cin >> quantity;

	//边数量异常
	if (quantity < 0 || quantity > length * (length - 1) / 2) { cout << "边数量错误!" << endl; return; }


	//开始创建边
	for (int i = 0; i < quantity; i++)
	{
		cout << i + 1 <<" 请输入有边的两个顶点的位置:";
		
		int k, z;

		cin >> k;
		cin >> z;
		
		//应判断输入的坐标是否在数组中存在否则会引起数组越界	 此处省略

		//无向图的边是相互的所以从任意顶点到另一顶点都有边存在
		arr[k][z] = true;
		arr[z][k] = true;

	}
}

template
map::~map()
{
	if (M != nullptr) { delete M; M = nullptr; }
	if (arr != nullptr)
	{
		for (int i = 0; i < length; i++)
		{
			delete[]arr[i];
			arr[i] = nullptr;
		}
		arr = nullptr;
	}
	length = 0;
}

template			//遍历顶点表和邻接矩阵
void map::print()
{
	for (int i = 0; i < length; i++)
	{
		for (int j = 0; j < length; j++)
		{
			cout << arr[i][j] << "  ";
		}
		cout << "tt" << M[i] << endl;
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873572.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号