数据结构之图的遍历代码实现

#include
#include
#include
using namespace std;
//题目信息
/*
         A
		/ \
	   B   D
	  /\  / \
	 C  FG  H
     \ /
	  E
*/
/*
  A B C D E F  G  H
A   1   1     
B 1   1     1  
C   1     1  
D 1            1  1
E     1      1
F   1     1
G       1         1
H       1      1
*/      
class Node
{
public:
   Node(char data=0)
   {
	   m_cData=data;
	   m_bIsVisited=false;
   }
   char m_cData;
   bool m_bIsVisited;
};
class CMap
{
public:

      CMap(int capacity)
	  {
          m_iCapacity = capacity;
		  m_iNodeCount= 0;
          m_pNodeArray = new Node[m_iCapacity];
          m_pMatrix = new int[m_iCapacity * m_iCapacity];
          memset(m_pMatrix,0,m_iCapacity * m_iCapacity * sizeof(int));
	  }
	  ~CMap()
	  {
		   delete []m_pNodeArray;
		   delete []m_pMatrix;
	  }

      bool addNode(Node *pNode)//向图中加入顶点 (结点)
	  {
		  m_pNodeArray[m_iNodeCount].m_cData=pNode->m_cData;
		  m_iNodeCount++;
		  return true;
	  }

	  void resetNode()  //重置顶点
	  {
		  for(int i=0;i=m_iCapacity)
		  {
			  return false;
		  }
		  if(col<0||col>=m_iCapacity)
		  {
			  return false;
		  }
          m_pMatrix[row*m_iCapacity+col]=val;
		  return true;
	  }
	  bool setValueToMatrixForUndirectedGraph(int row, int col, int val = 1) //为无向图设置邻接矩阵
      {
		  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;
		  return true;
	  }
	  void printMatrix() //打印邻接矩阵
	  {
          for(int i=0;i curVec;
          curVec.push_back(nodeIndex);
          breadthFirstTraverselmpl(curVec);
	  }
private:

      bool getValueFromMatrix(int row, int col, int &val) //从矩阵中获取权值
      {
          if(row<0||row>=m_iCapacity)
		  {
			  return false;
		  }
		  if(col<0||col>=m_iCapacity)
		  {
			  return false;
		  }
		  val=m_pMatrix[row*m_iCapacity+col];
		  return true;
	  }
	  void breadthFirstTraverselmpl(vector preVec)//广度优先遍历实现函数
      {
		  int value = 0;
          vector  curVec;

          for(int j= 0;j < (int)preVec.size(); j++)
		  {
            for(int i=0;i< m_iCapacity;i++)
			{
               getValueFromMatrix(preVec[j], i, value);
			   if(value != 0)
			   {
                  if(m_pNodeArray[i].m_bIsVisited)
				  {
					  continue;
				  }
				  else
				  {
					  cout << m_pNodeArray[i].m_cData << " ";
					  m_pNodeArray[i].m_bIsVisited=true;

					  curVec.push_back(i);
				  }
			   }
			}
		  }
		  if(curVec.size()==0)
		  {
			  return ;
		  }
		  else
		  {
			  breadthFirstTraverselmpl(curVec);
		  }
	  }
private:

      int m_iCapacity;  //图中最多可以容纳的顶点数 
      int m_iNodeCount; //已经添加的顶点(结点)个数
	  Node *m_pNodeArray; //用来存放顶点数组
	  int *m_pMatrix;     //用来存放邻接矩阵

};
int main()
{
    CMap *pMap=new CMap(8);

	Node *pNodeA=new Node('A');
	Node *pNodeB=new Node('B');
	Node *pNodeC=new Node('C');
	Node *pNodeD=new Node('D');
	Node *pNodeE=new Node('E');
	Node *pNodeF=new Node('F');
	Node *pNodeG=new Node('G');
	Node *pNodeH=new Node('H');

	pMap->addNode(pNodeA);
    pMap->addNode(pNodeB);
	pMap->addNode(pNodeC);
	pMap->addNode(pNodeD);
	pMap->addNode(pNodeE);
	pMap->addNode(pNodeF);
	pMap->addNode(pNodeG);
	pMap->addNode(pNodeH);

    pMap->setValueToMatrixForUndirectedGraph(0,1);
	pMap->setValueToMatrixForUndirectedGraph(0,3);
	pMap->setValueToMatrixForUndirectedGraph(1,2);
	pMap->setValueToMatrixForUndirectedGraph(1,5);
	pMap->setValueToMatrixForUndirectedGraph(3,6);
	pMap->setValueToMatrixForUndirectedGraph(3,7);
	pMap->setValueToMatrixForUndirectedGraph(0,1);
	pMap->setValueToMatrixForUndirectedGraph(6,7);
	pMap->setValueToMatrixForUndirectedGraph(2,4);
	pMap->setValueToMatrixForUndirectedGraph(4,5);

	pMap->printMatrix();
	cout<setValueToMatrixForDirectedGraph(0,1);
    pMap->setValueToMatrixForDirectedGraph(0,3);
	pMap->setValueToMatrixForDirectedGraph(1,2);
	pMap->setValueToMatrixForDirectedGraph(1,5);
	pMap->setValueToMatrixForDirectedGraph(3,6);
	pMap->setValueToMatrixForDirectedGraph(3,7);
	pMap->setValueToMatrixForDirectedGraph(6,7);
	pMap->setValueToMatrixForDirectedGraph(2,4);
	pMap->setValueToMatrixForDirectedGraph(4,5);

	pMap->printMatrix();
	cout<depthFirstTraverse(0);
	cout<resetNode();
	pMap->breadthFirstTraverse(0);
	cout<

 

数据结构之图的遍历代码实现_第1张图片

你可能感兴趣的:(C++)