C语言编程完成图的邻接矩阵和邻接表的创建。
时间: 2024-02-09 09:09:59 浏览: 76
图的邻接矩阵和邻接表实现
好的,下面是 C 语言的代码实现:
邻接矩阵:
```c
#include<stdio.h>
#include<stdlib.h>
#define MAXVEX 100 //最大顶点数
typedef struct
{
int vexs[MAXVEX]; //顶点表
int arc[MAXVEX][MAXVEX]; //邻接矩阵,可看作边表
int numVertexes, numEdges; //图中当前的顶点数和边数
}MGraph;
void CreateMGraph(MGraph *G)
{
int i, j, k, w;
printf("输入顶点数和边数:\n");
scanf("%d,%d", &G->numVertexes, &G->numEdges);
//读入顶点信息,建立顶点表
for (i = 0; i < G->numVertexes; i++)
{
printf("输入顶点信息:\n");
scanf("%d", &G->vexs[i]);
}
//初始化邻接矩阵
for (i = 0; i < G->numVertexes; i++)
{
for (j = 0; j < G->numVertexes; j++)
{
G->arc[i][j] = 0;
}
}
//读入numEdges条边,建立邻接矩阵
for (k = 0; k < G->numEdges; k++)
{
printf("输入边(vi,vj)上的下标i,下标j和权值w:\n");
scanf("%d,%d,%d", &i, &j, &w);
G->arc[i][j] = w;
G->arc[j][i] = G->arc[i][j];
}
}
int main()
{
MGraph G;
CreateMGraph(&G);
return 0;
}
```
邻接表:
```c
#include<stdio.h>
#include<stdlib.h>
#define MAXVEX 100 //最大顶点数
typedef struct EdgeNode //边表结点
{
int adjvex; //邻接点域,存储该顶点对应的下标
int weight; //存储权值
struct EdgeNode *next; //链域,指向下一个邻接点
}EdgeNode;
typedef struct VertexNode //顶点表结点
{
int in; //入度
int data; //顶点域,存储顶点信息
EdgeNode *firstedge; //边表头指针
}VertexNode, AdjList[MAXVEX];
typedef struct
{
AdjList adjList;
int numVertexes, numEdges; //图中当前顶点数和边数
}GraphAdjList;
void CreateALGraph(GraphAdjList *G)
{
int i, j, k;
EdgeNode *e;
printf("输入顶点数和边数:\n");
scanf("%d,%d", &G->numVertexes, &G->numEdges);
//读入顶点信息,建立顶点表
for (i = 0; i < G->numVertexes; i++)
{
printf("输入顶点信息:\n");
scanf("%d", &G->adjList[i].data);
G->adjList[i].in = 0; //初始化入度为0
G->adjList[i].firstedge = NULL; //将边表置为空表
}
//读入numEdges条边,建立邻接表
for (k = 0; k < G->numEdges; k++)
{
printf("输入边(vi,vj)上的顶点序号:\n");
scanf("%d,%d", &i, &j);
//向内存申请空间,生成边表结点
e = (EdgeNode *)malloc(sizeof(EdgeNode));
e->adjvex = j; //邻接序号为j
e->next = G->adjList[i].firstedge; //将e指针指向当前顶点指向的结点
G->adjList[i].firstedge = e; //将当前顶点的指针指向e
//向内存申请空间,生成边表结点
e = (EdgeNode *)malloc(sizeof(EdgeNode));
e->adjvex = i; //邻接序号为i
e->next = G->adjList[j].firstedge; //将e指针指向当前顶点指向的结点
G->adjList[j].firstedge = e; //将当前顶点的指针指向e
}
}
int main()
{
GraphAdjList G;
CreateALGraph(&G);
return 0;
}
```
阅读全文