//CMap.cpp
#include "CMap.h"
#include <iostream>
#include <vector>
using namespace std;
CMap::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));/初始化邻接矩阵
}
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;
}
}
//为边设置权值
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)
{//无向图的邻接矩阵是对称的
m_pMatrix[row*m_iCapacity+col] = val;
m_pMatrix[col*m_iCapacity+row] = val;
return true;
}
//根据权值判断两个顶点是否相连
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;
}
}
//深度优先搜索
void CMap::depthFirstTraverse(int nodeIndex)
{
int value = 0;
cout << m_pNodeArray[nodeIndex].m_cData << " ";
m_pNodeArray[nodeIndex].m_blsVisited = true;
//通过邻接矩阵判断是否与其他的顶点是否有连接
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;
}