-
//CMap.cpp #include?"CMap.h" #include?<iostream> #include?<vector> using?namespace?std; CMap::CMap(int?capacity) { ????m_iCapacity?=?capacity;//圖的最大頂點(diǎn)數(shù) ????m_iNodeCount?=?0;//圖的當(dāng)前頂點(diǎn)數(shù) ????m_pNodeArray?=?new?Node[m_iCapacity];//創(chuàng)建頂點(diǎn)數(shù)組 ????m_pMatrix?=?new?int[m_iCapacity*?m_iCapacity];//創(chuàng)建鄰接矩陣 ????memset(m_pMatrix,0,m_iCapacity*?m_iCapacity*sizeof(int));/初始化鄰接矩陣 } bool?CMap::addNode(Node*?pNode) { ????m_pNodeArray[m_iNodeCount].m_cData?=?pNode->m_cData; ????m_iNodeCount++; ????return?true; } void?CMap::resetNode() { ????for(int?i?=?0;i?<?m_iNodeCount,i++) ????{ ????????m_pNodeArray[i].m_blsVisited?=?false; ????} } //為邊設(shè)置權(quán)值 bool?CMap::setValueToMatrixForDirectedGraph(int?row,int?col,int?val) { ????m_pMatrix[row*m_iCapacity+col]?=?val; ????return?true; } bool?CMap::setValueToMatrixForUndirectedGraph(int?row,int?col,int?val) {//無向圖的鄰接矩陣是對(duì)稱的 ????m_pMatrix[row*m_iCapacity+col]?=?val; ????m_pMatrix[col*m_iCapacity+row]?=?val; ????return?true; } //根據(jù)權(quán)值判斷兩個(gè)頂點(diǎn)是否相連 bool?CMap::getValueFromMatrix(int?row,int?col,int&?val) { ????val?=?m_pMatrix[row*m_iCapacity+col]; ????return?true; } void?CMap::printMatrix() { ????for(int?i?=?0;i?<?m_iCapacity;i++) ????{ ????????for(int?j?=?0;j?<?m_iCapacity;j++) ????????{ ????????????cout?<<?p_Matrix[i*mCapacity+k]?<<?"?"; ????????} ????????cout?<<?endl; ????} } //深度優(yōu)先搜索 void?CMap::depthFirstTraverse(int?nodeIndex) { ????int?value?=?0; ???? ????cout?<<?m_pNodeArray[nodeIndex].m_cData?<<?"?"; ????m_pNodeArray[nodeIndex].m_blsVisited?=?true; ???? ????//通過鄰接矩陣判斷是否與其他的頂點(diǎn)是否有連接 ????for(int?i?=?0;i?<?m_iCapacity;i++) ????{ ????????getValFromMatrix(nodeIndex,i,value); ????????if(value?!=?0) ????????{ ????????????if(pNodeArray[i].m_blsVisited) ????????????{ ????????????????continue; ????????????} ????????????else{ ????????????????depthFirstTraverse(i); ????????????} ????????} ????} } CMap::~CMap() { ????delete?[]m_pNodeArray; ????delete?[]m_pMatrix; }
查看全部 -
//CMap.h #include?<vector> using?namespace?std; #include?"Node.h" class?CMap{ public: ????CMap(int?capacity);//向圖中加入頂點(diǎn) ????~CMap(); ????bool?addNode(Node*?pNode);//重置頂點(diǎn) ????void?resetNode(); ????bool?setValueToMatrixForDirecteGraph(int?row,int?col,int?val?=?1);????//為有向圖設(shè)置鄰接矩陣 ????bool?setValueToMatrixForUndirecteGraph(int?row,int?col,int?val?=?1);//為無向圖設(shè)置鄰接矩陣 ???? ????void?printMatrix();//打印鄰接矩陣 ???? ????void?depthFirstTraverse(int?nodeIndex);//深度優(yōu)先遍歷 ????void?breadthFirstTraverse(int?nodeIndex);//?廣度優(yōu)先遍歷 ??? private: ????bool?getValueFromMatrix(int?row,int?ol,int?&val);//從矩陣中獲取權(quán)值 ????void?breadthFirtTraverseImp(vector<int>?preVec);//廣度優(yōu)先遍歷實(shí)現(xiàn)函數(shù) ???? private: ????int?m_iCapacity;????????//圖中最多可以容納的頂點(diǎn)數(shù) ????int?m_iNodeCount;????????//已經(jīng)添加的頂點(diǎn)個(gè)數(shù) ????Node?*m_pNodeArray;????//存放頂點(diǎn)數(shù)組 ????int?*m_pMatrix;????????//存放鄰接矩陣 }; #endif
查看全部 -
//Node.cpp #include?"Node.h" Node::Node(char?data) { ????m_cData?=?data; ????m_lsVisited?=?false; }
查看全部 -
#ifndef?NODE_H #define?NODE_H class?Node { ???public: ???????Node(char?data?=?0); ???????char?m_cData;//節(jié)點(diǎn)數(shù)據(jù) ???????bool?m_blsVisited;//節(jié)點(diǎn)訪問標(biāo)志 }; #endif
查看全部 -
2. demo.cpp
查看全部 -
1. demo.cpp
查看全部 -
2. void CMap::breadthFirstTraverseImpl(vector<int> preVec)
查看全部 -
2. void CMap::breadthFirstTraverseImpl(vector<int> preVec)
查看全部 -
1. CMap::breadthFirstTraverse(int nodeIndex)
查看全部 -
4. NODE_CPP
查看全部 -
3. NODE_H
查看全部 -
2. CMAP_H
查看全部 -
1. CMAP_H
查看全部 -
數(shù)據(jù)結(jié)構(gòu)查看全部
-
1、圖的存儲(chǔ)結(jié)構(gòu)
查看全部
舉報(bào)
0/150
提交
取消