标签:using rect bool capacity cto 等于 span ret ==
不需要存储索引
#pragma once #ifndef NODE_H #define NODE_H #include<iostream> using namespace std; class Node { public: Node(char data = 0); char m_cData; bool m_IsVisited; }; #endif // !NODE_H
Node.cpp
将数据赋值给数据成员m_cData,是否访问置为否
#include"Node.h" Node::Node(char data) { m_cData = data; m_IsVisited = false; }
图类cMap.h
#pragma once #ifndef CMAP_H #define CMAP_H #include"Node.h" #include<vector> class cMap { public: cMap(int capacity); ~cMap(); bool addNode(Node *pNode);//向图中加入顶点(结点) void resetNode();//重置顶点 bool setValueToMatrixForDirectedGraph(int row, int col, int val = 1);//为有向图设置邻接矩阵 bool setValueToMatrixForUndirectedGraph(int row, int col, int val = 1);//为无向图设置邻接矩阵 void printMatrix();//打印邻接矩阵 void depthFirstTraverse(int nodeIndex);//深度优先遍历 void breadthFirstTraverse(int nodeIndex);//广度优先遍历 void breathFirstTraverseImpl(vector<int> preVec); private: bool getValueFromMatrix(int row,int col,int &val);//从矩阵中获取权值 void breathFirstTraverse(int nodeIndex);//广度优先遍历实现函数 private: int m_iCapacity;//图中最多可以容纳的顶点数 int m_iNodeCount;//已经添加的结点(顶点)个数 Node *m_pNodeArray;//用来存放顶点数组 int *m_pMatrix;//用来存放邻接矩阵 }; #endif // !CMAP_H
传入图容量参数给数据成员m_iCapacity
已经添加的结点数m_iNodeCount置为0
为顶点数组申请内存
申请m_iCapacity*m_iCapacity的矩阵
将矩阵元素全部置为0
cMap::cMap(int capacity) { m_iCapacity = capacity; m_iNodeCount = 0; m_pNodeArray = new Node[m_iCapacity]; m_pMatrix = new int[m_iCapacity*m_iCapacity]; for (int i = 0; i < m_iCapacity*m_iCapacity; i++) { m_pMatrix[i] = 0; } }
删除顶点数组指针
删除邻接矩阵指针
cMap::~cMap() { delete []m_pNodeArray; delete []m_pMatrix; }
判断传入的pNode参数是否为空,如果pNode为空,返回错误
将pNode的数据部分m_cData传入到以已经添加的结点个数为索引的顶点数组
已经添加结点个数++
返回正确结果
bool cMap::addNode(Node *pNode) { if (pNode == NULL) { return false; } m_pNodeArray[m_iNodeCount].m_cData = pNode->m_cData; m_iNodeCount++; return true; }
将已经添加的结点的m_IsVisited置为未访问
void cMap::resetNode() { for (int i = 0; i < m_iNodeCount; i++) { m_pNodeArray[i].m_IsVisited = false; } }
判断行列的合法性
如果行小于0,行大于等于最大容量,返回错误
如果列小于0,列大于等于最大容量,返回错误
图如下:
上图的邻接矩阵如下:
以(A,B)即(0,1),0行1列,0*8+1=1。
满足row*m_iCapacity计算的索引
bool cMap::setValueToMatrixForDirectedGraph(int row, int col, int val) { if(row<0 || row>=m_iCapacity) { return false; } if (col < 0 || col >= m_iCapacity) { return false; } m_pMatrix[row*m_iCapacity + col] = val; return true; }
逻辑同上
col*m_iCapacity和row*m_iCapacity+col与主对角线成轴对称
bool cMap::setValueToMatrixForUndirectedGraph(int row, int col, int val) { if (row<0 || row >= m_iCapacity) { return false; } if (col < 0 || col >= m_iCapacity) { return false; } m_pMatrix[row*m_iCapacity + col] = val; m_pMatrix[col*m_iCapacity + row] = val; }
标签:using rect bool capacity cto 等于 span ret ==
原文地址:https://www.cnblogs.com/Java-Starter/p/9452026.html