函数题:无向图的邻接表表示转换为邻接矩阵表示
编写算法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;
}
/* 请在这里填写答案 */

### 输入样例:
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
答案:若无答案欢迎评论
### 函数接口定义:
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;
}
/* 请在这里填写答案 */

### 输入样例:
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
答案:若无答案欢迎评论