图有两种主要的存储结构:邻接矩阵和邻接表
邻接矩阵时表示顶点之间相邻关系的矩阵。
邻接矩阵的主要特点:
(1)一个图的邻接矩阵表示是唯一的;
(2)特别适合于稠密图的存储;
图的邻接矩阵存储类型声明:
#define INF INT_MAX
#define max 30//最大顶点个数
typedef char VertexType[10];
typedef struct vertex{
int adj;//顶点的编号
VertexType data;//顶点信息
}Vtype;
typedef struct graph{
int n,e;//n为实际顶点数,e为实际边数
Vtype vexs[max];//顶点集合
int edges[max][max];//边的集合
}mgraph;
实现图的基本运算:
(1)建立图的邻接矩阵
void create(mgraph &g,int a[][max],int n,int e)
{
int i,j;
g.n=n;g.e=e;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
g.edges[i][j]=a[i][j]
}
}
}
(2)求顶点度
int degree1(mgraph g,int v)//无向图
{
int i,d=0;
if(v<0||v>=g.n)
{
return -1;//顶点编号错误就返回-1
}
for(i=0;i<g;i++)
{
if(g.edges[v][i]>0&&g.edges[v][i]<INF)
d++;//统计v行不为0也不为无穷的边数
}
return d;//有向图中还需统计v列
}