图的邻接表结构
来源:互联网 发布:重庆链家端口费怎么算 编辑:程序博客网 时间:2024/06/03 16:39
class Graph{public:Graph();Graph(unsigned int vtxCount, unsigned int edgeCount);~Graph();void create(unsigned int vtxCount, unsigned int edgeCount); //给图的结点容器和边容器分配内存 int addVtx(); //添加空结点 void addEdges(int i, int j, int w); //添加点之间的边n-link void addTermWeights(int i, int sourceW, int sinkW); //添加结点到顶点的边t-link private:class Vtx //结点类 {public:Vtx *next; //在maxflow算法中用于构建先进-先出队列 int first; //首个相邻边 };class Edge //边类 {public:int dst; //边指向的结点 int next; //该边的顶点的下一条边 int weight; //边的权重 };std::vector<Vtx> vtcs; //存放所有的结点 std::vector<Edge> edges; //存放所有的边 int flow; //图的流量 };Graph::Graph(){}Graph::Graph(unsigned int vtxCount, unsigned int edgeCount){create(vtxCount, edgeCount);}Graph::~Graph(){}void Graph::create(unsigned int vtxCount, unsigned int edgeCount) //构造函数的实际内容,根据节点数和边数 {vtcs.reserve(vtxCount);edges.reserve(edgeCount + 2);}/*函数功能:添加一个空结点,所有成员初始化为空参数说明:无返回值:当前结点在集合中的编号*/int Graph::addVtx(){Vtx v;memset(&v, 0, sizeof(Vtx)); //将结点申请到的内存空间全部清0(第二个参数0) 目的:由于结点中存在成员变量为指针,指针设置为null保证安全 vtcs.push_back(v);return (int)vtcs.size() - 1; //返回值:当前结点在集合中的编号 }/*函数功能:添加一条结点i和结点j之间的边n-link(普通结点之间的边)参数说明:int---i: 弧头结点编号int---j: 弧尾结点编号int---w: 正向弧权值返回值:无*/void Graph::addEdges(int i, int j, int w){assert(i >= 0 && i < (int)vtcs.size());assert(j >= 0 && j < (int)vtcs.size());assert(w >= 0);assert(i != j);Edge fromI; // 正向弧:fromI, 反向弧 toI fromI.dst = j; // 正向弧指向结点j fromI.next = vtcs[i].first; //每个结点所发出的全部n-link弧(4个方向)都会被连接为一个链表,采用头插法插入所有的弧 fromI.weight = w; // 正向弧的权值w vtcs[i].first = (int)edges.size(); //修改结点i的第一个弧为当前正向弧 edges.push_back(fromI); //正向弧加入弧集合 }int main(){Graph g(5, 25);for (int i = 0; i < 5; i++)g.addVtx();g.addEdges(0, 2, 3);return 0;}
阅读全文
0 0
- 图的邻接表结构
- 图的邻接表存储结构
- 图的邻接表存储结构
- 图的存储结构(邻接表)
- 图的常用存储结构----邻接表
- 图的邻接表存储结构
- 图的邻接表存储结构
- 图的存储结构 --- 邻接表
- 图的常用存储结构----邻接表
- 图的存储结构-邻接表
- 邻接表 图的存储结构
- 7.2图的存储结构(邻接表)
- 图的储存结构之邻接表
- 图的存储结构之邻接表
- 图的存储结构(邻接矩阵、边数组、邻接表、十字链表、邻接多重表)
- 图的邻接表结构的宽度搜索
- 图的邻接表存储结构的定义及其遍历
- 图的存储结构——邻接表的建立
- 【Unity3d游戏开发】浅谈Unity中的GC以及优化
- 你眼中的程序员------加油程序员
- 三角切分 之 判断点是否在三角形内
- 关于深度学习的一些比较好的网站总结
- 面向对象六大原则
- 图的邻接表结构
- 用Telnet测试端口号
- 修改DB2中日期显示的格式
- Error:Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/suppor
- 深度学习平台集锦
- linux新的API signalfd、timerfd、eventfd使用说明
- jstl_foreach
- C++之学习处理模板化基类内的名称(43)---《Effective C++》
- c++在线编写程序,常见的输入数据格式 和本地编译器输入的区别