图的存储
圖分為有向圖和無向圖,如果按照?qǐng)D的邊長(zhǎng)分,又分帶權(quán)圖和無權(quán)圖。
這里實(shí)現(xiàn)有向圖的存儲(chǔ)
鄰接矩陣
可以使用鄰接矩陣來存儲(chǔ),這種方法一般用來存儲(chǔ)稠密圖,否則0較多,浪費(fèi)空間和時(shí)間。
矩陣中:graph[i][j]表示 i 存在指向 j 的邊。
鄰接矩陣簡(jiǎn)單存儲(chǔ)如下:
測(cè)試結(jié)果
如圖,graph[0][2]=1,表示0存在指向2的有向通路。
鄰接表
鄰接表存儲(chǔ)相鄰節(jié)點(diǎn)的指針
比如由0 可以指向2和4,則存儲(chǔ)neighbors->label為2和4.
測(cè)試代碼
#include<iostream> #include<vector>using namespace std;struct graphNode{int label;//頂點(diǎn)的數(shù)值 vector<graphNode*> neighbors;//相鄰節(jié)點(diǎn)的指針數(shù)組,邊的位置只存儲(chǔ)連接的頂點(diǎn) graphNode(int x):label(x){}; };int main() {const int MAX_N =5;graphNode* Graph[MAX_N];//5個(gè)頂點(diǎn)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]; }測(cè)試結(jié)果
希望對(duì)你有幫助。
總結(jié)
- 上一篇: 2018花呗提额任务在哪 记住这个方法就
- 下一篇: 哈希表计数排序