標籤:using rect bool capacity cto 等於 span ret ==
結點類Noded.h
不需要儲存索引
#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;}
有向圖和無向圖的數組C++實現