//以下定义邻接矩阵类型
typedef struct
{
int vexs[MAXV];
int arcs[MAXV][MAXV];
int vexnum,arcnum;
} MGraph;
//以下定义邻接表类型
typedef struct ANode
{
int adjvex;
struct ANode *nextarc;
} ArcNode;
typedef struct Vnode
{
int data;
ArcNode *firstarc;
} VNode;
typedef struct
{
VNode vertices[MAXV];
int vexnum,arcnum;
} ALGraph;
void MatToList(MGraph g,ALGraph *&G)
//将邻接矩阵g转换成邻接表G
{
int i,j;
ArcNode *p,*s;
G=(ALGraph *)malloc(sizeof(ALGraph));
for (i=0; i<g.vexnum; i++)
G->vertices[i].firstarc=NULL;
for (i=0; i<g.vexnum; i++)
for (j=0; j<g.vexnum; j++)
if (g.arcs[i][j]!=0)
{
p=(ArcNode *)malloc(sizeof(ArcNode));
p->adjvex=j; p->nextarc=NULL;
if(!G->vertices[i].firstarc)
G->vertices[i].firstarc=p;
else{
s=G->vertices[i].firstarc;
while(s->nextarc) s=s->nextarc;
s->nextarc=p;
}
}
G->vexnum=g.vexnum;
G->arcnum=g.arcnum;
}
将无向图的邻接矩阵转为对应邻接表
最新推荐文章于 2023-07-17 17:35:27 发布