zoukankan      html  css  js  c++  java
  • 图论基础

    今天发现寒假学的图论基础还挺有用,今天贴下代码

    邻接矩阵:

     1 #include<stdio.h>
     2 #include<string.h>
     3 
     4 int map[100][100];
     5 
     6 void init()
     7 {
     8     memset(map,0,sizeof(map));
     9 }
    10 
    11 void add(int u, int v, int w)
    12 {
    13    map[u][v]=w;
    14 }
    15 
    16 int main()
    17 {
    18     int n,m,u,v,w;
    19     init();
    20     scanf("%d%d",&n,&m);
    21     while(m--)
    22     {
    23         scanf("%d%d%d",&u,&v,&w);
    24         add(u,v,w);
    25         add(v,u,w);
    26     }
    27     for(int i=1;i<=n;i++)
    28     {
    29         printf("与%d相关联的顶点有:
    ",i);
    30      for(int j=1;j<=n;j++)
    31          if(map[i][j]!=0)
    32              printf("%d ",j);
    33         printf("
    ");
    34     }
    35     return 0;
    36 }

    邻接表——边表:

     1 #include<stdio.h>
     2 #include<string.h>
     3 struct node
     4 {
     5     int u,v,w;
     6     int next;
     7 } g[100];
     8 
     9 int head[100],t=0;
    10 
    11 void init()
    12 {
    13     t = 0;
    14     memset(head,-1,sizeof(head));
    15 }
    16 
    17 void add(int u, int v, int w)
    18 {
    19     g[t].u = u;
    20     g[t].v = v;
    21     g[t].w = w;
    22     g[t].next = head[u];
    23     head[u] = t;
    24     t++;
    25 }
    26 
    27 int main()
    28 {
    29     int n,m,u,v,w;
    30     init();
    31     scanf("%d%d",&n,&m);
    32     while(m--)
    33     {
    34         scanf("%d%d%d",&u,&v,&w);
    35         add(u,v,w);
    36         add(v,u,w);
    37     }
    38     for(int i=1;i<=n;i++)
    39     {
    40         printf("与%d相关联的顶点有:
    ",i);
    41     for(int j=head[i]; j!=-1; j=g[j].next)
    42         printf("%d ",g[j].v);
    43         printf("
    ");
    44     }
    45     return 0;
    46 }

    邻接表——链表:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 struct node
     5 {
     6    int u;
     7    int v;
     8    int w;
     9    struct node* next;
    10 }*head[100];
    11 
    12 void init()
    13 {
    14    memset(head,NULL,sizeof(head));
    15 }
    16 
    17 void add(int u, int v, int w)
    18 {
    19    struct node *p = (struct node*)malloc(sizeof(struct node));
    20    p->u = u;
    21    p->v = v;
    22    p->w = w;
    23    p->next = head[u];
    24    head[u] = p;
    25 }
    26 
    27 int main()
    28 {
    29     int n,m,u,v,w;
    30     init();
    31     scanf("%d%d",&n,&m);
    32     while(m--)
    33     {
    34         scanf("%d%d%d",&u,&v,&w);
    35         add(u,v,w);
    36         add(v,u,w);
    37     }
    38     for(int i=1;i<=n;i++)
    39     {
    40         printf("与%d相关联的顶点有:
    ",i);
    41         for(struct node* p = head[i]; p != NULL; p = p->next)
    42         printf("%d ",p->v);
    43         printf("
    ");
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    leetCode-Two Sum
    leetCode-Pascal's Triangle II
    leetCode-Maximum Average Subarray I
    css 实现垂直水平居中
    poping 心法
    我的机密
    MSMQ消息队列的使用
    生成最大单号 scope_identity
    sqlserver ADO.net 查询数据库加锁,事务提交
    漂亮的JS插件
  • 原文地址:https://www.cnblogs.com/bfshm/p/3170614.html
Copyright © 2011-2022 走看看