• 大小: 63KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-06-18
  • 语言: C/C++
  • 标签: 代码  

资源简介

图的C++的邻接表和邻接矩阵完整实现,功能齐全,运行界面效果好

资源截图

代码片段和文件信息

#include
#include
#include                   //引入标准库中的头文件
#include “graph.h“                //引入头文件
using namespace std;
/*
*前置条件:图不存在
*输    入:无
*功    能:图的初始化
*输    出:无
*后置条件:构造一个空的图
*/
template 
MGraph::MGraph(T a[] int n int e bool tflag bool tnet)
{
vertexNum = n;                 //顶点数
arcNum = e;                    //边数
flag = tflag;                   //有向图还是无向图的标识
net = tnet;                     //带权图还是不带权图的标识
Initgraph(n);//动态创建图的顶点数组和边数组
for (int i = 0; i vertex[i] = a[i];
if (net == false)// 如果是不带权图
{
for (int i = 0; i  for (int j = 0; j < maxsize; j++)
arc[i][j] = 0;
}
else  //带权图
{
for (int i = 0; i < maxsize; i++)    //初始化邻接矩阵
for (int j = 0; j < maxsize; j++)
arc[i][j] = Maxweigh;
}
for (int i = 0; i < maxsize; i++)//初始化储存顶点度,入度,出度的数组
{
degree[i] = indegree[i] = outdegree[i] = 0;
}
Initarc();//创建邻接矩阵
calculatedegree();//计算各顶点的度,入度,出度
}
template
MGraph::MGraph(MGraph&M)
{
Copy(M);
}
template
MGraph::~MGraph()//析构函数
{
Empty();//调用清理内存函数清理内存;
}
template
void MGraph::Empty()//清理内存函数
{
for (int i = 0; i < maxsize; i++)
delete[]arc[i];//清理邻接矩阵每一行数组的动态内存
delete[]arc;//清理指针数组的内存
delete[]vertex;//清理顶点数组的内存
delete[]degree;//清理储存顶点度的数组的内存
delete[]indegree;//清理储存顶点入度的数组的内存
delete[]outdegree;//清理储存顶点出度的数组的内存
delete[]visited;//清理访问数组的动态内存
}
template
void MGraph::Copy(MGraph&M)
{
//拷贝私有数据成员
vertexNum = M.vertexNum;
arcNum = M.arcNum;
maxsize = maxsize > M.maxsize ? maxsize : M.maxsize;//取maxsize与M.maxsize
flag = M.flag;
net = M.net;
vertex =new T[maxsize];
for (int i = 0; i < maxsize; i++)//拷贝顶点数组
vertex[i] = M.vertex[i];
arc = new int*[maxsize];
for (int i = 0; i < maxsize; i++)
{
arc[i] = new int[maxsize];
}
for (int i = 0; i < maxsize; i++)//拷贝邻接矩阵
{
for (int j = 0; i < maxsize; j++)
{
arc[i][j] = M.arc[i][j];
}
}
degree = new int[maxsize];
for (int i = 0; i < maxsize; i++)//拷贝储存顶点度的数组
degree[i] = M.degree[i];
indegree = new int[maxsize];
for (int i = 0; i < maxsize; i++)//拷贝储存顶点入度的数组
indegree[i] = M.indegree[i];
outdegree = new int[maxsize];
for (int i = 0; i < maxsize; i++)//拷贝储存顶点入度的数组
outdegree[i] = M.outdegree[i];
}
template
void MGraph::Initgraph(int n)
{
if (n < MaxSize)//如果结点个数n小于MaxSize,图的结点最大容纳个数设为默认值MaxSize
{
maxsize = MaxSize;
}
else//如果结点个数n大于等于MaxSize,则图的结点最大容纳个数设为n+10
{
maxsize = n + 10;
}
vertex = new T[maxsize];// 创建动态顶点数组
arc = new int*[maxsize];//创建邻接矩阵的行指针
for (int i = 0; i  {
arc[i] = new int[maxsize];
}
degree = new int[maxsize];//创建动态储存各顶点度的数组
indegree = new int[maxsize];//创建动态储存各顶点入度的数组
outdegree = new int[maxsize];// 创建动态储存各顶点出度的数组
}
template
void MGraph::Initarc()
{
if (flag == false)   //无向图
{
fo

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      16074  2018-06-10 15:32  实验10+16342113+刘剑锋+20180610\邻接矩阵\graph.cpp

     文件       2479  2018-06-10 15:32  实验10+16342113+刘剑锋+20180610\邻接矩阵\graph.h

     文件       4985  2018-06-10 11:13  实验10+16342113+刘剑锋+20180610\邻接矩阵\main.cpp

     文件     111616  2018-06-10 15:32  实验10+16342113+刘剑锋+20180610\邻接矩阵\Project123.exe

     文件      11357  2018-06-10 15:38  实验10+16342113+刘剑锋+20180610\邻接矩阵\图的邻接矩阵储存运行结果.txt

     文件      14694  2018-06-10 15:24  实验10+16342113+刘剑锋+20180610\邻接表\graph.cpp

     文件       2614  2018-06-10 15:16  实验10+16342113+刘剑锋+20180610\邻接表\graph.h

     文件       5326  2018-06-10 13:59  实验10+16342113+刘剑锋+20180610\邻接表\main.cpp

     文件     110592  2018-06-10 15:24  实验10+16342113+刘剑锋+20180610\邻接表\Project124.exe

     文件      11780  2018-06-10 15:30  实验10+16342113+刘剑锋+20180610\邻接表\图的邻接表储存运行结果.txt

     目录          0  2018-06-10 15:40  实验10+16342113+刘剑锋+20180610\邻接矩阵

     目录          0  2018-06-10 15:41  实验10+16342113+刘剑锋+20180610\邻接表

     目录          0  2018-06-10 15:39  实验10+16342113+刘剑锋+20180610

----------- ---------  ---------- -----  ----

               291517                    13


评论

共有 条评论