用邻接矩阵表示赋权无向图时,将一个赋权无向图G当作一个赋权有向图来处理,将G的每一条边(i,j),用两条有向边(i,j)和(j,i)来代替。因此,加入边权为w的有向边(i,j)时,还应同时加入边权为w的有向边(j,i); 删除边时同理
其余操作同 邻接表实现赋值有向图
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
//int noEdge=0;
//数据结构
typedef struct graph *Graph;
typedef struct graph
{
int NoEdge; //无边标记
int n; //顶点数
int e; //边数
int **a; //邻接矩阵
}AWDgraph;
void Error(char *str) //打印错误信息并退出
{
printf("%s",str);
exit(0);
}
Graph GraphInit(int n,int noEdge)
{
Graph G=(Graph)malloc(sizeof(AWDgraph));
G->n=n;
G->e=0;
G->NoEdge=noEdge;//各顶点对间均无边
G->a=(int **)malloc(sizeof(int *)*(n+1)); //构建邻接矩阵
for(int i=0;i<=n;i++) //动态分配二维数组
G->a[i]=(int *)malloc(sizeof(int)*(n+1));
for( i=1;i<=n;i++)
for(int j=1;j<=n;j++)
G->a[i][j]=G->NoEdge;
return G