向图中增加结点
我们前面说过采用邻接矩阵来存储图,那么向图中增加结点其实只需要改变顶点数目,以及在邻接矩阵中增加点与点,点与边的关系即可。
先看增加结点的函数
就是向函数中传入结点,判断图如果未满就将其存入存放结点的数组,然后给节点数目加一。
//向图中增加顶点
bool addNode(Node* pNode)
{
if (pNode == NULL)
return false;
if (m_iNodeCount >= m_iCapacity)
{
cout << "图已满!";
return false;
}
//加到顶点数组
m_pNodeArray[m_iNodeCount].m_cdata = pNode->m_cdata;
m_iNodeCount++; //数量加1
return true;
}
但是这只是形式上的增加了结点,并没有真正反映到图中的对应关系,下面我们通过改变邻接矩阵来反映到图中的对应关系。
改变邻接矩阵
向函数中传入:要插入的结点在存储结点的数组中的下标以及和与这个结点相连的结点的下标,val默认为1.
先是无向图的:
//无向图的邻接矩阵赋值,把两个顶点连在一起,val为1时是连在一起,0是表示没连在一起
bool setValueToMatrixForUndirectedGraph(int row, int col, int val)
{
if (row < 0 || row >= m_iCapacity || col < 0 || col >= m_iCapacity)
return false;
m_pMatrix[row * m_iCapacity + col] = val;
m_pMatrix[col * m_iCapacity + row] = val;
return true;
}
再是有向图的
//有向图的邻接矩阵赋值,把两个顶点连在一起,val为1时是连在一起,0是表示没连在一起
bool setValueToMatrixForDirectedGrap(int row, int col, int val)
{
if (row < 0 || row >= m_iCapacity || col < 0 || col >= m_iCapacity)
return false;
m_pMatrix[row * m_iCapacity + col] = val;
return true;
}