图的邻接表存储表示示例讲解_C语言教程-查字典教程网
图的邻接表存储表示示例讲解
图的邻接表存储表示示例讲解
发布时间:2017-01-07 来源:查字典编辑
摘要:复制代码代码如下://---------图的邻接表存储表示-------#include#include#defineMAX_VERTEXT...

复制代码 代码如下:

//---------图的邻接表存储表示-------

#include<stdio.h>

#include<stdlib.h>

#define MAX_VERTEXT_NUM 20

typedef int InfoType;

typedef char VertextType;

typedef struct ArcNode

{

int adjvex;

struct ArcNode *nextArc;

InfoType *info;

}ArcNode;

typedef struct VNode

{

VertextType data;

ArcNode *firstArc;

}VNode, AdjList[MAX_VERTEXT_NUM];

typedef struct

{

AdjList verTices;

int vexNum;

int arcNum;

int kind;

}ALGraph;

void CreateGraph(ALGraph *G);

void DisplayGraph(ALGraph *G);

int main()

{

ALGraph *Graph = (ALGraph *)malloc(sizeof(ALGraph));

CreateGraph(Graph);

DisplayGraph(Graph);

system("pause");

}

void CreateGraph(ALGraph *G)

{

int i,j,k;

ArcNode *arcNode;

printf_s("请输入顶点数和边数:");

scanf_s("%d,%d",&G->vexNum, &G->arcNum);

//建立顶点表

printf_s("建立顶点表n");

for (i = 0; i < G->vexNum; i++)

{

printf_s("请输入第%d个顶点:", i);

fflush(stdin);//刷新缓冲区

G->verTices[i].data = getchar();

G->verTices[i].firstArc = NULL;

}

//建立边表

printf_s("建立边表n");

for (k = 0; k < G->arcNum; k++)

{

printf_s("请输入(vi-vj)的顶点对序号");

scanf_s("%d,%d", &i, &j);

arcNode = (ArcNode *)malloc(sizeof(ArcNode));

arcNode->adjvex = j;

arcNode->nextArc = G->verTices[i].firstArc;//插入表头

G->verTices[i].firstArc = arcNode;

arcNode = (ArcNode *)malloc(sizeof(ArcNode));

arcNode->adjvex = i;

arcNode->nextArc = G->verTices[j].firstArc;//插入表头

G->verTices[j].firstArc = arcNode;

}

}

void DisplayGraph(ALGraph *G)

{

int i;

for (i = 0; i < G->vexNum; i++)

{

printf_s("%d->", i);

while (G->verTices[i].firstArc != NULL)

{

printf_s("%d->", G->verTices[i].firstArc->adjvex);

G->verTices[i].firstArc = G->verTices[i].firstArc->nextArc;

}

printf_s("n");

}

}

复制代码 代码如下:

请输入顶点数和边数:6,7

建立顶点表

请输入第0个顶点:0

请输入第1个顶点:1

请输入第2个顶点:2

请输入第3个顶点:3

请输入第4个顶点:4

请输入第5个顶点:5

建立边表

请输入(vi-vj)的顶点对序号0,1

请输入(vi-vj)的顶点对序号0,4

请输入(vi-vj)的顶点对序号1,4

请输入(vi-vj)的顶点对序号1,5

请输入(vi-vj)的顶点对序号2,3

请输入(vi-vj)的顶点对序号2,5

请输入(vi-vj)的顶点对序号3,5

0->4->1->

1->5->4->0->

2->5->3->

3->5->2->

4->1->0->

5->3->2->1->

请按任意键继续. . .

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新C语言学习
    热门C语言学习
    编程开发子分类