-->
当前位置:首页 > 题库

函数题:无向图的邻接表表示转换为邻接矩阵表示

Luz4年前 (2022-09-16)题库504
编写算法MatriNode listTomatri (LGraph gl)实现:把无向图的邻接表表示转换为邻接矩阵表示。

### 函数接口定义:
c++
MatriNode listTomatri (LGraph gl);


LGraph为采用 邻接表作为存储结构的无向图,MatriNode为采用 邻接矩阵作为存储结构的无向图。


### 裁判测试程序样例:
c++
#include <stdio.h>
#include <stdlib.h>
#define MAXVERTEXNUM 100

//邻接点的定义
typedef struct AdjVNode *PtrToAdjVNode;
struct AdjVNode{
int AdjV; //邻接点的下标
PtrToAdjVNode Next; //指向下一个邻接点的指针
int weight; //权值
};

//顶点表头结点的定义
typedef struct VNode{
char Data; //顶点数据
PtrToAdjVNode FirstEdge; //边表头指针
}AdjList[MAXVERTEXNUM]; //AdjList是邻接表类型

typedef struct GNode *PtrToGNode;
struct GNode{
int Nv; //顶点数
int Ne; //边数
AdjList G; //邻接表
};

//邻接矩阵表示图
typedef struct MatriNode{
int Nv; //顶点数
int Ne; //边数
int G[MAXVERTEXNUM][MAXVERTEXNUM]; //邻接矩阵
char Data[MAXVERTEXNUM];
}MatriNode;

typedef PtrToGNode LGraph; //以邻接表方式存储的图类型

MatriNode listTomatri (LGraph gl);

LGraph BuildGraph()
{
int v,i,k,j;
LGraph Graph;
PtrToAdjVNode NewNode;

Graph = (LGraph)malloc(sizeof(struct GNode));

//printf("输入顶点数和边数:\n");
scanf("%d %d",&Graph->Nv,&Graph->Ne);

//输入顶点信息
for(v = 0;v < Graph->Nv; v++){
getchar();
scanf("%c",&Graph->G[v].Data);
Graph->G[v].FirstEdge = NULL; //将指向边表的指针初始化
}

//建立边表
char vi,vj;
int w;
//printf("输入边<vi,vj>中的顶点vi,vj:\n");
for(k = 0;k < Graph->Ne; k++){ //k记录插入边的个数
getchar();
scanf("%c %c %d",&vi,&vj,&w);

for(i = 0; Graph->G[i].Data != vi; i++) ;//找vi在顶点数组中的下标
for(j = 0; Graph->G[j].Data != vj; j++) ;//找vj在顶点数组中的下标

//为vj建立新的邻接点
NewNode = (PtrToAdjVNode)malloc(sizeof(struct AdjVNode));
NewNode->AdjV = j;
NewNode->weight = w;
NewNode->Next = Graph->G[i].FirstEdge; //头插法插入边结点
Graph->G[i].FirstEdge = NewNode;
}
return Graph;
}

void outputGraphW(MatriNode MatriGraph){
printf("该图的邻接矩阵为:");
int i,j;
for (i=0; i<MatriGraph.Nv; i++){
printf("\n");
for (j=0; j<MatriGraph.Nv; j++)
printf(" %d",MatriGraph.G[i][j]);
}
}

int main(){
LGraph Graph2;
MatriNode MatriGraph;
int n2;
int num2;
Graph2 = BuildGraph();

MatriGraph = listTomatri(Graph2);
outputGraphW(MatriGraph);

return 0;
}
/* 请在这里填写答案 */


![a3bb691e-54b7-4a58-b8a4-c441eb3df882.png](~/85268986-bf84-465c-99b0-859f65f4bb1f.png)


### 输入样例:
in
5 8
A B C D E
A B 8
A E 4
B C 7
B D 12
B E 5
C D 6
C E 11
D E 3


### 输出样例:
out
该图的邻接矩阵为:
0 8 0 0 4
0 0 7 12 5
0 0 0 6 11
0 0 0 0 3
0 0 0 0 0







答案:若无答案欢迎评论