经典代码之图 邻接表转换成邻接矩阵

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

运行结果是:

请输入节点数和弧数:3 3

第1 个节点信息:5

第2 个节点信息:6

第3 个节点信息:7

第1 条弧的弧尾和弧头的位置:1 2 第2 条弧的弧尾和弧头的位置:2 3 第3 条弧的弧尾和弧头的位置:1 3 图的邻接表表示为:

[1,5]-->[3,7]-->[2,6]-->^

[2,6]-->[3,7]-->[1,5]-->^

[3,7]-->[1,5]-->[2,6]-->^

交换后是::

图的邻接矩阵表示为:

0 1 1

1 0 1

1 1 0

请按任意键继续. . .

代码是:

#include

#include

#define MAXV 100

typedef struct

{

int no;

int info;

}vertextype;

typedef struct

{

int num;

int edges[MAXV][MAXV];

// vertextype vexs[MAXV];

}mgraph;

struct arcnode

{

int adjvex;

int info;

struct arcnode *nextarc;

};

struct vexnode

{

int data;

struct arcnode *firstarc;

};

struct graph

{

int vexnum,arcnum;

vexnode vexpex[100];

};

struct graph *creatgraph()

{

int i,s,d;

struct graph *g;

struct arcnode *p,*q;

g = (struct graph *)malloc(sizeof(struct graph));

printf("请输入节点数和弧数:");

scanf("%d%d", &g->vexnum, &g->arcnum);

for(i=1; i<=g->vexnum; i++)

{

printf("第%d 个节点信息:",i);

scanf("%d", &g->vexpex[i].data);

g->vexpex[i].firstarc = NULL;

}

for(i=1; i<=g->arcnum; i++)

{

p = (struct arcnode *)malloc(sizeof(struct arcnode));

q = (struct arcnode *)malloc(sizeof(struct arcnode));

printf("第%d 条弧的弧尾和弧头的位置:",i);

scanf("%d%d",&s,&d);

p->adjvex = d;

p->info = g->vexpex[d].data;

p->nextarc = g->vexpex[s].firstarc;

g->vexpex[s].firstarc = p;

q->adjvex = s;

q->info = g->vexpex[s].data;

q->nextarc = g->vexpex[d].firstarc;

g->vexpex[d].firstarc = q;

}

return g; //return graph!

}

void changeto(graph *G, mgraph &g)

{

int i,j;

arcnode *m;

g.num = G->vexnum;

for(i = 1; i<=G->vexnum; i++)

for(j = 1; j<=G->vexnum; j++)

g.edges[i][j] = 0;

for(i = 1; i<=G->vexnum; i++)

{

m = G->vexpex[i].firstarc;

while(m)

{

g.edges[i][m->adjvex] = 1;

m = m->nextarc;

}

}

}

void printtu(struct graph *g,int n)

{

int i;

arcnode *p;

printf("图的邻接表表示为:\n");

for(i=1; i<=n; i++)

{

printf(" [%d,%d]-->", i, g->vexpex[i].data);

p = g->vexpex[i].firstarc;

while(p != NULL)

{

printf("[%d,%d]-->", p->adjvex, p->info);

p = p->nextarc;

}

printf("^\n");

}

}

void printftu2(mgraph g)

{

int i,j;

printf("图的邻接矩阵表示为:\n");

for(i = 1; i<=g.num; i++)

{

for(j = 1;j <= g.num; j++)

printf("%d ",g.edges[i][j]);

printf("\n");

}

}

void main()

{

graph *G;

mgraph g;

G = creatgraph();

printtu(G,G->vexnum);

printf("交换后是::\n");

changeto(G, g);

printftu2(g);

system("PAUSE");

}

相关文档
最新文档