• 前向星,链式前向星


    很久没做图论了,基本的数据结构都有点忘了,现在复习下,继续图论

     1 /******************************************************************/
     2     Author:wangzhili
     3     title:test.c
     4     time: 2013年 12月 02日 星期一 18:07:16 CST 
     5 /******************************************************************/
     6 #include<stdio.h>
     7 #include<string.h>
    13 typedef struct 
    14 {
    15     int from;           //记录边的起点;
    16     int to;             //记录边的终点;
    17     int w;              //权值;
    18 }Edge;
    19 Edge edge[1000];
    20 int head[1000];         //记录每条边起点的位置;
    21 int cmp(const void *a,const void *b)        //排序;
    22 {
    23     Edge p1 = *(Edge *)a;
    24     Edge p2 = *(Edge *)b;
    25     if(p1.from != p2.from)
    26         return p1.from - p2.from;
    27     return p1.to - p2.to;
    28 }
    29 int main()
    30 {
    31     int n,m,i,j;
    32     while(~scanf("%d%d",&n,&m))
    33     {
    34         for(i = 0;i < m;i ++)
    35         {
    36             scanf("%d%d",&edge[i].from,&edge[i].to);
    37         }
    38         qsort(edge,m,sizeof(edge[0]),cmp);
    39         memset(head,-1,sizeof(head));
    40         head[edge[0].from] = 0;
    41         for(i = 1;i < m;i ++)               //记录每条边的起点的位置;          
    42         {
    43             if(edge[i].from != edge[i-1].from)          
    44                 head[edge[i].from] = i;
    45         }
    46         for(i = 1;i < m;i ++)               //从起点位置为1的边开始查起;
    47         {
    48             for(j = head[i];i == edge[j].from;j ++)         //如果存在起点位置为i的边,把以head[i]为起点的边全部处理完;
    49                 printf("%d %d
    ",edge[j].from,edge[j].to);
    50         }
    51     }
    52     return 0;
    53 }
     1 /******************************************************************/
     2     Author:wangzhili
     3     title:lsqxx.c
     4     time: 2013年 12月 02日 星期一 18:07:16 CST 
     5 /******************************************************************/
     6 #include<stdio.h>
     7 #include<string.h>
     8 typedef struct
     9 {
    10     int to;            //记录该条边起点指向的第一个终点;
    11     int w;            //记录边的权值;
    12     int next;        //记录以该边起点为起点的下一条边的位置;
    13 }Edge;
    14 Edge edge[1000];
    15 int head[1000];        //记录起点为v的边在Edge数组中的位置;
    16 int main()
    17 {
    18     int n,m,i,k;
    19     int a,b,t;
    20     while(~scanf("%d%d",&n,&m))
    21     {
    22         memset(head,-1,sizeof(head));
    23         t = 0;
    24         for(i = 1;i <= m;i ++)
    25         {
    26             scanf("%d%d",&a,&b);
    27             edge[i].to = b;
    28             edge[i].next = head[a];
    29             head[a] = i;
    30         }
    31         for(i = 1;i <= m;i ++)
    32         {
    33             for(k = head[i];k != -1;k = edge[k].next)
    34             {
    35                 printf("%d %d
    ",i,edge[k].to);
    36             }
    37         }
    38     }
    39     return 0;
    40 }
  • 相关阅读:
    中国国家授时中心的时间服务器IP地址及时间同步方法
    找不到aspnet用户权限的解决方法
    unbunt下刻录光盘
    关于ubuntu 是否需要使用std::到问题。
    acm题
    IIS发生意外错误0x8ffe2740
    SQL Server Express的使用
    解决用户"sa"登录失败。该用户与可信 sql server 连接无关联。
    在CSDN上的第一篇博客
    在线求助 man page(转)
  • 原文地址:https://www.cnblogs.com/anhuizhiye/p/3454490.html
Copyright © 2020-2023  润新知