• 邻接表


    数据大时矩阵不够 这时用邻接表;


    指针类型的邻接表

     1 /*邻接表*/
     2 #include<stdio.h>
     3 #include<string.h>
     4 #include<iostream>
     5 struct arcnode//边结点
     6 {
     7     int vertex;//与表头定点相邻的顶点编号
     8     int weight;//边的权值
     9     arcnode *next;//指向下一条边
    10 };
    11 struct vernode//顶点结点
    12 {
    13     int vex;//顶点编号
    14     arcnode *firarc;//
    15 }ver[1000];
    16 int n;
    17 void inint()
    18 {
    19     int i;
    20     for(i=1;i<=n;i++)
    21     {
    22         ver[i].vex=i;
    23         ver[i].firarc=NULL;
    24     }
    25 }
    26 void add(int x,int y,int z)
    27 {
    28     int i,j;
    29     arcnode *p;
    30     p=new arcnode();
    31     p->vertex=y;
    32     p->weight=z;
    33     p->next=NULL;
    34     if(ver[x].firarc==NULL)
    35     {
    36         ver[x].firarc=p;
    37     }
    38     else 
    39     {
    40         while(ver[x].firarc->next!=NULL)
    41         {
    42             if(ver[x].firarc->vertex==y)//检查有重复
    43             {
    44                 if(ver[x].firarc->weight>z)
    45                     ver[x].firarc->weight=z;
    46                 return;
    47             }
    48             ver[x].firarc=ver[x].firarc->next;
    49         }
    50         ver[x].firarc->next=p;
    51         return;
    52     }
    53 }
    54 int main()
    55 {
    56     int i,j;
    57     scanf("%d",&n);
    58     inint();
    59     for(i=1;i<=6;i++)
    60     {
    61         int x,y,z;
    62         scanf("%d%d%d",&x,&y,&z);
    63         add(x,y,z);
    64         add(y,x,z);
    65     }
    66 }

    /*
    就是一副画 然后就很好懂了
    @1->#->#->null
    @2->#->#->#->null
    @3->#->null
    类似如此的画
    */

     1 /*******--------*******/
     2 /*静态邻接表*/
     3 
     4 #include<stdio.h>
     5 #include<string.h>
     6 struct node
     7 {
     8     int v;//后面点
     9     int w;//
    10     int next;//记录同一起点的下一条边的位置
    11 }edge[200005];
    12 
    13 int n,m,dis[53003];//dis[]放长度
    14 int vis[53003];//标记
    15 
    16 int index;//表示位置
    17 
    18 int pre[53003];//开始的顶点
    19 
    20 void add(int x,int y,int z)
    21 {
    22     edge[index].v=y;//后面那个点
    23     edge[index].w=z;//edge[].w表示权值
    24     edge[index].next=pre[x];//保存x起点的上一条边在edge数组中的位置
    25     pre[x]=index++;//更新
    26     //以下为无向图
    27     /*edge[index].v=x;
    28     edge[index].w=z;
    29     edge[index].next=pre[y];
    30     pre[y]=index++;*/
    31     
    32 }
    33 
    34 struct Node
    35 {
    36     int point,dist;
    37     bool operator<(const Node x) const //优先队列的自定义(这里最小的,可以发现大小号)
    38     {
    39         return x.dist<dist;
    40     }
    41 };
    42 int main()
    43 {
    44     int i,j,t;
    45     scanf("%d",&t);
    46     while(t--)
    47     {
    48         scanf("%d %d",&n,&m);
    49         index=1;
    50         memset(vis,0,sizeof(vis));
    51         memset(pre,-1,sizeof(pre));
    52         for(i=0;i<m;i++)
    53         {
    54             int x,y,z;
    55             scanf("%d %d %d",&x,&y,&z);
    56             if(x==y)continue;
    57             add(x,y,z);
    58         }
    59     }
    60 }
  • 相关阅读:
    MySQL客户端管理
    Windows10安装Pytorch环境要点
    使用ssh加密github通信
    JVM 对象状态判断01
    并发之AbstractQueuedLongSynchronize----AQS
    关于CountDownLatch控制线程的执行顺序
    关于线程执行顺序的问题
    并发之Striped64(l累加器)
    并发之线程以及线程的中断状态
    1 JPA入门----项目搭建以及CRUD
  • 原文地址:https://www.cnblogs.com/sweat123/p/4478217.html
Copyright © 2020-2023  润新知