建立图-有权图边集数组
有权图的另一种存储结构是边集数组,适用于一些以边为主的操作,用边集数组表示有权图时,列出每条边所依附的两个顶点及边上的权,即每个数组元素代表一条边的信息。
存储结构如下:
1 #define MAX 100 //最大边数
2 typedef struct{
3 int head,tail; //边的起始和终点
4 char data; //边上的信息
5 }Edge;
6 Edge EdgeArray[MAX];
完整程序:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }