图的基本存储结构

题目要求及测试数据

图片:
题目要求:
     输入n,m,n表示该图有n个顶点,m表示该图有m条边。
    
     输出与每个顶点所关联的点。
    
(数据范围暂时忽略,要求用今天讲的三中存储结构分别来做)
    
View Code
  1 //邻接矩阵
  2 #include<stdio.h>
  3 #include<string.h>
  4 int map[10][10] ;
  5 void init()
  6 {
  7     memset(map, 0, sizeof(map)) ;
  8 }
  9 int main()
 10 {
 11     int n, m, i, j, u, v, w ;
 12     init() ;
 13     scanf("%d %d", &n, &m) ;
 14     for(i=0; i<m; i++)
 15     {
 16        scanf("%d%d%d",&u, &v, &w) ;
 17        map[u][v] = map[v][u] = w ;
 18     }
 19     for(i=1; i<=n; i++)
 20     {
 21         printf("与%d相关联的点有:\n", i) ;
 22         for(j=1; j<=n; j++)
 23         {
 24             if(map[i][j]!=0)
 25              printf("%d ", j) ;
 26         }
 27         printf("\n") ;
 28     }
 29     return 0 ;
 30 }
 31 
 32 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 33 //邻接表--边表
 34 #include<stdio.h>
 35 #include<string.h>
 36 #include<malloc.h>
 37 struct node
 38 {
 39     int u, v, w ;
 40     int next ;
 41 }g[100];
 42 int head[100], t = 0 ;
 43 void init()
 44 {
 45     t = 0 ;
 46     memset(head, -1, sizeof(head)) ;
 47 }
 48 void add(int u, int v, int w)
 49 {
 50    g[t].u = u ;
 51    g[t].v = v ;
 52    g[t].w = w ;
 53    g[t].next = head[u] ;
 54    head[u] = t ;
 55    t++ ;
 56 }
 57 int main()
 58 {
 59     int n, m, i, j, u, v, w ;
 60     init() ;
 61     scanf("%d%d",&n, &m) ;
 62     for(i=0; i<n; i++)
 63     {
 64         scanf("%d%d%d",&u,&v,&w) ;
 65         add(u,v,w) ;
 66         add(v,u,w) ;
 67     }
 68     for(i=1; i<=n; i++)
 69     {
 70         printf("与%d相关联的点有:\n",i) ;
 71         for(j=head[i];j!=-1;j=g[j].next)
 72         {
 73            printf("%d ",g[j].v) ;
 74         }
 75         printf("\n") ;
 76     }
 77     return 0 ;
 78 }
 79 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 80 //邻接表--链表
 81 #include<stdio.h>
 82 #include<string.h>
 83 #include<malloc.h>
 84 struct node
 85 {
 86     int u, v, w ;
 87     node *next ;
 88 }*head[100];
 89 void init()
 90 {
 91     memset(head, NULL, sizeof(head)) ;
 92 }
 93 void add(int u, int v, int w)
 94 {
 95    node *p = (node*)malloc(sizeof(node)) ;
 96    p -> v = v ;
 97    p -> w = w ;
 98    p-> next = head[u] ;
 99    head[u] = p ;
100 }
101 int main()
102 {
103     int n, m, i, u, v, w ;
104     init() ;
105     scanf("%d%d",&n, &m) ;
106     for(i=0; i<n; i++)
107     {
108         scanf("%d%d%d",&u,&v,&w) ;
109         add(u,v,w) ;
110         add(v,u,w) ;
111     }
112     for(i=1; i<=n; i++)
113     {
114         printf("与%d相关联的点有:\n",i) ;
115         for(node*p=head[i];p!=NULL;p=p->next)
116         {
117            printf("%d ", p->v) ;
118         }
119         printf("\n") ;
120     }
121     return 0 ;
122 }
原文地址:https://www.cnblogs.com/yelan/p/2922434.html