图的存储
圖分為有向圖和無向圖,如果按照圖的邊長分,又分帶權圖和無權圖。
這里實現有向圖的存儲
鄰接矩陣
可以使用鄰接矩陣來存儲,這種方法一般用來存儲稠密圖,否則0較多,浪費空間和時間。
矩陣中:graph[i][j]表示 i 存在指向 j 的邊。
鄰接矩陣簡單存儲如下:
測試結果
如圖,graph[0][2]=1,表示0存在指向2的有向通路。
鄰接表
鄰接表存儲相鄰節點的指針
比如由0 可以指向2和4,則存儲neighbors->label為2和4.
測試代碼
#include<iostream> #include<vector>using namespace std;struct graphNode{int label;//頂點的數值 vector<graphNode*> neighbors;//相鄰節點的指針數組,邊的位置只存儲連接的頂點 graphNode(int x):label(x){}; };int main() {const int MAX_N =5;graphNode* Graph[MAX_N];//5個頂點for(int i=0;i<MAX_N;i++)Graph[i]=new graphNode(i); //添加邊Graph[0]->neighbors.push_back(Graph[2]);Graph[0]->neighbors.push_back(Graph[4]);Graph[1]->neighbors.push_back(Graph[0]);Graph[1]->neighbors.push_back(Graph[2]);Graph[2]->neighbors.push_back(Graph[3]);Graph[3]->neighbors.push_back(Graph[4]); Graph[4]->neighbors.push_back(Graph[3]);cout<<"graph: "<<endl;for(int i=0;i<MAX_N;++i){cout<<"Label("<<i<<"): ";for(int j=0;j<Graph[i]->neighbors.size();++j)cout<<Graph[i]->neighbors[j]->label<<" ";cout<<endl;}for(int i=0;i<MAX_N;i++)delete Graph[i]; }測試結果
希望對你有幫助。
總結
- 上一篇: 2018花呗提额任务在哪 记住这个方法就
- 下一篇: 哈希表计数排序