图的基本存储结构
题目要求及测试数据
图片:
题目要求:
输入n,m,n表示该图有n个顶点,m表示该图有m条边。
输出与每个顶点所关联的点。
(数据范围暂时忽略,要求用今天讲的三中存储结构分别来做)
输入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 }