有關樹的經常需要存圖,vector陣列比較方便,不過有些題卡stl,就很容易t。所以鏈式向前星就非常重要了。
這幾天能不用鏈式向前星就不用,因為不會用...這當然是不可取的。想起來初中老班的一句話,出來混遲早是要還的,所以問題不解決遲早是要栽坑的。昨天遇見dfs序時不太會模擬,因為對出棧的點的順序理解的不是很通透,全套板子。一步一步穩著來,zkw衝呀
鏈式向前星是一種特殊的邊集陣列,我們把邊集陣列中的每一條邊按照起點從小到大排序,如果起點相同就按照終點從小到大排序,並用head[ ]記錄下以某個點為起點的所有邊在陣列中的起始位置。換句話來理解它其實就是有n鍊錶,每條鍊錶存的是所有相同結點的邊。
edge[i].to:第i條邊的終點,即這條邊指向哪個點
edge[i].val:邊權
head[i]:以第i為初始結點的邊的序號,其實在以i為起點的所有邊的最後輸入的那個編號
用圖表示:
int head[maxn]; //記得初始化為-1
int cnt = 0;
struct node edge[maxn]; //若建立雙向邊的話,maxn需要*2
void add(int a,int b,int val)
//遍歷起點為x的鍊錶
for(int i = head[x]; i!=-1; i=node[i].nxt)
鏈式向前星(陣列模擬鄰接表)
有的時候有的圖可能比較稀疏而且點數較多,鄰接矩陣存不下,所以就要用到鄰接表。鄰接錶用vector陣列比較方便,但是vector比較慢。所以就有了鏈式向前星。include include include using namespace std 鏈式向前星其實就是有n鍊錶,每條鍊錶存的是所有相同結點的...
鏈式向前星
我們首先來看一下什麼是前向星.前向星是一種特殊的邊集陣列,我們把邊集陣列中的每一條邊按照起點從小到大排序,如果起點相同就按照終點從小到大排序,並記錄下以某個點為起點的所有邊在陣列中的起始位置和儲存長度,那麼前向星就構造好了.用len i 來記錄所有以i為起點的邊在陣列中的儲存長度.用head i 記...
建邊 鄰接矩陣 vector 鏈式向前星
圖論的中一般都會牽涉到建邊的問題,下面的這三種建邊的方法視情況選取 int main struct node vectorvt 300 vt i 中存的是以i為起點的邊,vt i 0 e vt i 1 e vt i 2 e 分別表示每條邊的終點 intmain 以sx為起點的邊 vt ex push...