建立图-有权图边集数组

有权图的另一种存储结构是边集数组,适用于一些以边为主的操作,用边集数组表示有权图时,列出每条边所依附的两个顶点及边上的权,即每个数组元素代表一条边的信息。

存储结构如下:

1 #define MAX 100   //最大边数
2 typedef struct{
3    int head,tail;      //边的起始和终点
4    char data;         //边上的信息
5 }Edge;
6 Edge EdgeArray[MAX];

完整程序:

 1 //无向带权图边集数组存储 
 2 #include<cstdio>
 3 #include<iostream>
 4 #include<algorithm>
 5 
 6 const int MAX = 100;                       //最大边数 
 7 using namespace std; 
 8 
 9 typedef struct{
10     int head,tail;                        //头节点,尾节点 
11     int data;                             //权值,边信息 
12 }Edge;
13 Edge EdgeArray[MAX];
14 
15 int createEdge()                          //创建无向带权图的边数组存储 
16 {
17     int n,i,v1,v2,k;
18     printf("请输入带权图边数:");
19     scanf("%d",&n);
20     for(i = 1;i <= n;i++)
21     {
22         printf("v1,v2,边上的权值=");
23         scanf("%d %d %d",&EdgeArray[i].head,&EdgeArray[i].tail,&EdgeArray[i].data);
24     }
25     
26     return n;
27 }
28 
29 bool cmp1(Edge a,Edge b)
30 {
31     return a.head <= b.head;
32 }
33 
34 int main()
35 {
36     int n,i;
37     n = createEdge(); 
38     sort(EdgeArray+1,EdgeArray+n+1,cmp1);
39     printf("有权无向图的边集数组存储:\n");
40     for(i = 1;i <= n ;i++)
41     {
42         printf("%d---(%d)---%d",EdgeArray[i].head,EdgeArray[i].data,EdgeArray[i].tail);
43         printf("\n");
44     }
45     
46     return 0;
47 }
View Code

猜你喜欢

转载自www.cnblogs.com/mlblog27/p/9569586.html
今日推荐