啊我还是太弱了居然要收录模板 

 

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 }
链式向前星

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-09-30
  • 2021-11-28
  • 2021-07-31
  • 2022-01-08
  • 2021-05-20
  • 2021-10-25
猜你喜欢
  • 2021-10-28
  • 2022-12-23
  • 2022-12-23
  • 2022-01-20
  • 2021-08-10
  • 2022-12-23
相关资源
相似解决方案