• 静态邻接表


     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 const long lmax=10; //边的数量
     5 const long mmax=10; //点的数量
     6 struct node //静态邻接表用每个node表示每一条边
     7 {
     8       int v; //边的终点
     9       int w; //边的权值
    10       int next; //同一起点的上一条边的在edge数组的位置
    11 
    12 }edge[lmax];
    13 int pre[mmax]; //用来记录以X为起点的最终一条边在edge数组的位置
    14 int n,m; //n用来记录点的个数,m用来记录边的条数
    15 void input()
    16 { 
    17     memset(pre,-1,sizeof(pre));
    18     int x,y,w;
    19     int index=1; //index用来记录边的数量
    20     int q;
    21 for(q=1;q<=m;q++)
    22 {
    23     scanf("%d%d%d",&x,&y,&w);
    24 
    25     edge[index].v=y;
    26     edge[index].w=w;
    27     edge[index].next=pre[x]; //应用的是倒向追踪法,保存起以x为起点的上一条边在edge数组中的位置
    28     pre[x]=index++; //index用来记录edge中的位置,位置不断更新
    29 
    30 }
    31 }
    32 //等input结束,pre数组里面存的是以x为起点,最后一条边在edge中的位置
    33 void output()
    34 {
    35     int j;
    36 for(j=1;j<=n;j++)
    37 {
    38      printf("以%d为起点\n",j);
    39 for(int k=pre[j];k!=-1;k=edge[k].next) //采用倒向追踪法,对j为起点的进行倒向追踪
    40 {
    41      printf("%d->",edge[k].v);
    42   }
    43      printf("%d\n",j);
    44  }
    45 }
    46 int main()
    47 {
    48 while(scanf("%d%d",&n,&m)!=EOF&&(n!=0&&m!=0))
    49 {
    50    input();
    51     output();
    52 }
    53 return 0;
    54 } 
  • 相关阅读:
    代码块
    hp g6 2328tx 加装ssd 机械硬盘安装到光驱位置 问题小结
    thinking java
    命令设计模式
    内部类
    模板方法模式
    UIAlertController
    一个基于qml的网络封装库
    qml package 的使用
    一个QMLListView的例子--
  • 原文地址:https://www.cnblogs.com/zafuacm/p/2877170.html
Copyright © 2020-2023  润新知