1. 程式人生 > 實用技巧 >278 Flask學習【第07篇】:Flask中的wtforms使用

278 Flask學習【第07篇】:Flask中的wtforms使用

技術標籤:其他演算法

鏈式前向星模板

//前置條件
const int N=105;
int hd[N],cnt=0;
 
struct Edge {
	int to,val,nxt;
}e[N*N];

//鏈式前向星 
void build(int u,int v,int w)
{
	e[++cnt].to=v;
	e[cnt].val=w;
	e[cnt].nxt=hd[u];
	hd[u]=cnt;
}

下面以簡易的 D A G DAG DAG 圖舉例(三點三邊)

//建圖
for(int i=0;i<3;++i)
{
	int u,v,w;
	cin>>u>>
v>>w; build(u,v,w); } //遍歷以 u節點為起始位置的所有邊 for(int u=1;u<=3;++u) { for(int i=hd[u];i;i=e[i].nxt) { cout<<u<<' '<<e[i].to<<' '<<e[i].val<<endl; } }
input:
1 2 3
1 3 6
2 3 9

output:
1 3 6
1 2 3
2 3 9

詳解

結構體 E d g e Edge Edge 中的 to、val、nxthead 的含義如下

to:箭頭指向的節點
val:邊上的權值
nxt:該節點(u)上一次指向邊的編號,若沒有上一次指向邊則為 0
hd:當前邊的編號

cnt 代表每條邊的編號,從下標 1 開始,所以當 nxt 為 0 時,即該節點(u)目前沒有指向過任意一條邊

hdhead)和 nxtnext)都是儲存邊的編號,因此遍歷也是按照點對應的邊來遍歷
第一重迴圈,迴圈所有節點,也就是將每個節點作都為 u,尋找其指向邊
第二重迴圈hd[u] 儲存的是節點 u 所有指向邊中最後一條邊(編號最大)的編號,ed[hd[u]].nxt 表示當前節點的上一次指向邊的編號,若是 0 則已經全部遍歷完了(停止遍歷)