啊我还是太弱了居然要收录模板
1.链式向前星
1 //链式向前星(数组模拟邻接表) 2 //单向链表 3 struct pp 4 { 5 int s;//开始 (父亲) 6 int e;//结束 (儿子) 7 int v;//权值 8 int nex; 9 } f[maxn]; 10 int fir[maxn]; 11 int main() 12 { 13 scanf("%d",&n); 14 for(int i=1;i<=n;i++)//n条边 15 { 16 scanf("%d",x,y,z); 17 f[i].s=x; 18 f[i].e=y; 19 f[i].v=z; 20 f[i].nex=fir[x]; 21 fir[x]=i; 22 } 23 for(int i=fir[f];i;i=f[i].nex) 24 dfs;//遍历 25 } 26 27 //双向链表 28 struct pp 29 { 30 int s;//开始 (父亲) 31 int e;//结束 (儿子) 32 int v;//权值 33 int nex; 34 } f[maxn*2]; 35 int fir[maxn]; 36 int tot=0; 37 void build(int x,int y,int z) 38 { 39 f[++tot].e=y; 40 f[tot].s=x; 41 f[tot].nex=fir[x]; 42 f[tot].v=z; 43 fir[x]=tot; 44 } 45 //遍历,每个边遍历两次 46 int main() 47 { 48 scanf("%d",&n);//n条边 49 for(int i=1;i<=n;i++) 50 { 51 int x,y,z; scanf("%d%d%d",&x,&y,&z); 52 build(x,y,z); build(y,x,z);//来回时边权相同,不同的话循环n*2次依次输入 53 } 54 for(int i=fir[f];i;i=f[i].nex) 55 dfs; 56 57 } 58 //树的遍历 ,只遍历一次(n个结点,n-1条边的全连通图叫树) 59 void dfsl(int f,int fath)//现在的位置,父亲 60 { 61 for(int i=fir[f];i;i=f[i].nex) 62 if(f[i].t!=fath)//遍历儿子结点并DFS 63 dfsl(f[i].t,f); 64 } 65 int mian() 66 { 67 scanf("%d%d",&n,&s);//n个结点,s为根 68 for(int i=1;i<=n-1;i++) 69 { 70 int x,y; scanf("%d%d",&x,&y); 71 build(x,y); build(y,x); 72 } 73 dfsl(s,0); 74 }