1、图的邻接矩阵表示法实现
#include<stdio.h>
#include<malloc.h>
#include<assert.h>
#define Default_Vertex_Size 10
#define T char
//图的定义
typedef struct GraphMtx
{
int MaxVertices;
int NumVertices;
int NumEdge;
T *VerticesList;
int **Edge;
}GraphMtx;
//矩阵的初始化
void InitGraphMtx(GraphMtx *g)
{
g->MaxVertices = Default_Vertex_Size;
g->NumVertices = g->NumEdge = 0;
g->VerticesList = (T*)malloc(sizeof(T)*g->MaxVertices);
assert(g->VerticesList!=nullptr);
g->Edge = (int**)malloc(sizeof(int*)*g->MaxVertices);
assert(g->Edge!=nullptr);
for(int i=0;i<g->MaxVertices;++i)
{
g->Edge[i] = (int*)malloc(sizeof(int)*g->MaxVertices);
}
for(int i=0;i<g->MaxVertices;++i)
{
for(int j=0;j<g->MaxVertices;++j)
{
g->Edge[i][j] = 0;
}
}
}
void InsertVertex(GraphMtx *g,T v)
{
if(g->NumVertices >= g->MaxVertices)
return;
g->VerticesList[g->NumVertices++] = v;
}
//输出矩阵
void ShowGraphMtx(GraphMtx *g)
{
printf(" ");
for(int i=0;i<g->NumVertices;++i)
{
printf("%c ",g->VerticesList[i]);
}
printf("\n");
for(int i=0;i<g->NumVertices;++i)
{
printf("%c ",g->VerticesList[i]);
for(int j=0;j<g->NumVertices;++j)
printf("%d ",g->Edge[i][j]);
printf("\n");
}
printf("\n");
}
int main()
{
GraphMtx gm;
InitGraphMtx(&gm);
InsertVertex(&gm,'A');
InsertVertex(&gm,'B');
InsertVertex(&gm,'C');
InsertVertex(&gm,'D');
InsertVertex(&gm,'E');
//InsertVertex(&gm,'A');
ShowGraphMtx(&gm);
return 0;
}