当前位置: 首页 > news >正文

C++数据结构 (图)邻接矩阵模板

一、成品代码

#include<iostream>
using namespace std;#define inf -1class Graph {
private:int vertices;int** edges;
public:Graph(int vertices);~Graph();void addEdge(int u, int v, int w);//代表往这个图中添加一条从u到v的边,边的权为wvoid printGraph();
};//构造函数
Graph::Graph(int vertices) {this->vertices = vertices;//顶点个数edges = new int* [vertices];//二维数组,一个指针数组,每个指针指向一个数组//初始化数组for (int i = 0; i < vertices; i++) {edges[i] = new int[vertices];for (int j = 0; j < vertices; j++) {edges[i][j] = inf;}}
}//析构函数
Graph::~Graph() {for (int i = 0; i < vertices; i++) {delete[] edges[i];}delete[] edges;
}void Graph::addEdge(int u, int v, int w) {edges[u][v] = w;
}
void Graph::printGraph() {for (int i = 0; i < vertices; i++) {for (int j = 0; j < vertices; j++) {cout << edges[i][j] << " ";}cout << endl;}
}int main() {int vertices = 5;Graph graph(vertices);graph.addEdge(0, 1, 1);graph.addEdge(0, 2, 3);graph.addEdge(1, 2, 2);graph.addEdge(2, 3, 7);graph.addEdge(3, 4, 9);graph.addEdge(4, 0, 4);graph.addEdge(4, 2, 5);graph.printGraph();return 0;
}

二、构造过程

(1)我们的目标是构造一个图,一个图需要由顶点和线构成,图可以由邻接矩阵来表示,矩阵我们又可以由二维数组表示。因此我们的类需要有两个元素,顶点个数和一个二维数组。我们还需要连线的方法和打印图的方法。其中连线的方法我们需要知道线是从谁连向谁,权重是多少。构造函数时需要知道有多少个顶点,构造出空的图。

#include<iostream>
using namespace std;class Graph {int vertices;int** edges;Graph(int vertices);~Graph();void addGraph(int u,int v,int w);void printGraph();
};

(2)我们先实现构造函数的方法,我们需要或的一个vertices大小的指针数组,数组中的每个元素是一个vertices大小的数组。并将数组中每个元素初始化为空(指定任意不可能取到的值即可)。

#include<iostream>
using namespace std;#define inf -1
class Graph {int vertices;int** edges;Graph(int vertices);~Graph();void addGraph(int u,int v,int w);void printGraph();
};Graph::Graph(int vertices) {this->vertices = vertices;edges = new int* [vertices];for (int i = 0; i < vertices; i++) {edges[i] = new int[vertices];for (int j = 0; j < vertices; j++) {edges[i][j] = inf;}}
}
Graph::~Graph() {}
void Graph::addGraph(int u, int v, int w) {}
void Graph::printGraph() {}

(3)析构函数则是遍历指针数组,将每个元素一一删除,再将指针数组删除

#include<iostream>
using namespace std;#define inf -1
class Graph {int vertices;int** edges;Graph(int vertices);~Graph();void addGraph(int u,int v,int w);void printGraph();
};Graph::Graph(int vertices) {this->vertices = vertices;edges = new int* [vertices];for (int i = 0; i < vertices; i++) {edges[i] = new int[vertices];for (int j = 0; j < vertices; j++) {edges[i][j] = inf;}}
}
Graph::~Graph() {for (int i = 0; i < vertices; i++) {delete[]edges[i];}delete edges;
}
void Graph::addGraph(int u, int v, int w) {}
void Graph::printGraph() {}

(4)连线直接给二维数组对应索引赋值即可

#include<iostream>
using namespace std;#define inf -1
class Graph {int vertices;int** edges;Graph(int vertices);~Graph();void addGraph(int u,int v,int w);void printGraph();
};Graph::Graph(int vertices) {this->vertices = vertices;edges = new int* [vertices];for (int i = 0; i < vertices; i++) {edges[i] = new int[vertices];for (int j = 0; j < vertices; j++) {edges[i][j] = inf;}}
}
Graph::~Graph() {for (int i = 0; i < vertices; i++) {delete[]edges[i];}delete edges;
}
void Graph::addGraph(int u, int v, int w) {edges[u][v] = w;
}

(5)打印就是简单的遍历即可

#include<iostream>
using namespace std;#define inf -1
class Graph {int vertices;int** edges;Graph(int vertices);~Graph();void addGraph(int u,int v,int w);void printGraph();
};Graph::Graph(int vertices) {this->vertices = vertices;edges = new int* [vertices];for (int i = 0; i < vertices; i++) {edges[i] = new int[vertices];for (int j = 0; j < vertices; j++) {edges[i][j] = inf;}}
}
Graph::~Graph() {for (int i = 0; i < vertices; i++) {delete[]edges[i];}delete edges;
}
void Graph::addGraph(int u, int v, int w) {edges[u][v] = w;
}
void Graph::printGraph() {for (int i = 0; i < vertices; i++) {for (int j = 0; j < vertices; j++) {cout << edges[i][j] << " ";}cout << endl;}
}

http://www.dtcms.com/a/416770.html

相关文章:

  • 时装网站建设的背景动漫设计学什么
  • 如何申请一个网站 新网wordpress 管理员插件
  • 国内做视频的网站惠州外贸网站建设公司
  • 贷前风控策略:框架、准入、收紧、回捞、置换、定额...
  • 网站 留言 以邮件形式企业线上培训课程
  • 网站页面下载印度做爰免费网站视频
  • 公司自建网站备案岳阳市 网站建设
  • 网站建设企业属于什么类型的公司网站图片上传不上去怎么办
  • 做旅游攻略网站查询网站入口
  • 【ROS2】DDS通信协议介绍
  • 福州网站建设教程视频代理一个手游需要多少钱
  • 单网页网站制作竞价排名适合百度吗
  • 找工作在什么网站找比较好个人网站开发的意义
  • 做网站需要投入多少钱手工制作花
  • 企业网站源码 asp中国十大网络科技公司
  • 房城乡建设部网站上海建设部门网站
  • 网站网页翻页设计如何新建一个网页页面
  • 重庆怎么制作网站?比较著名的seo网站
  • 国内建筑设计网站网址安全中心检测
  • 网站建设 10万元部门网站 法规制度 建设情况
  • 门户网站规划方案wordpress 阅读插件
  • 怎么更改网站标题网站推广成本
  • 公司网站如何注册杭州盘石做网站专业吗
  • scala网站开发在县城做团购网站
  • 网站建设规划任务书用nas 做网站
  • 大二学生做网站难吗奉化网站建设报价
  • 网站建设中企动力强网站建设和维护自学
  • 网站主题页如何做外链
  • InnoDB表压缩调优实战指南
  • 快递公司网站源码seo与网站建设