向圖中增加結點
我們前面說過採用鄰接矩陣來存儲圖,那麼向圖中增加結點其實只需要改變頂點數目,以及在鄰接矩陣中增加點與點,點與邊的關係即可。
先看增加結點的函數
就是向函數中傳入結點,判斷圖如果未滿就將其存入存放結點的數組,然後給節點數目加一。
//向圖中增加頂點
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;
}