解决方法
邻接表是一种图的表示方式,可以通过链表来表示每个顶点的邻接点集合。将邻接矩阵转化为邻接表,可以先创建一个顶点数组,然后对于每个顶点,将其对应的行或列中非零元素的列或行号(表示相邻的其他顶点)存储到该顶点的链表中。
代码实现
#include
#include
#define MAX_VERTEX_NUM 50
// 邻接表中的边结构体
typedef struct EdgeNode {
int adjvex; // 邻接顶点的下标
struct EdgeNode *next; // 指向下一个邻接点的指针
}EdgeNode;
// 邻接表中的顶点结构体
typedef struct VertexNode {
int data; // 顶点的数据
EdgeNode *firstedge; // 指向第一个邻接点的指针
}VertexNode, AdjList[MAX_VERTEX_NUM];
// 图结构体
typedef struct {
AdjList adjList; // 邻接表
int vertexNum; // 顶点数
int edgeNum; // 边数
}Graph;
// 将邻接矩阵转化为邻接表
void createGraph(Graph *G, int matrix[][MAX_VERTEX_NUM])
{
int i, j;
for (i = 0; i vertexNum; i++) {
G->adjList[i].data = i; // 顶点的数据为下标
G->adjList[i].firstedge = NULL; // 初始化指向第一个邻接点的指针为空
for (j = 0; j vertexNum; j++) {
if (matrix[i][j] != 0) { // 邻接矩阵中元素不为0,表示有边
// 创建一个邻接点结构体
EdgeNode *edge = (EdgeNode*)malloc(sizeof(EdgeNode));
edge->adjvex = j;
edge->next = G->adjList[i].firstedge; // 将新创建的邻接点插入到该顶点的链表头
G->adjList[i].firstedge = edge; // 更新该顶点的链表头指针
}
}
}
}
int main()
{
int matrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM] = { // 邻接矩阵
{0, 1, 1, 0},
{1, 0, 0, 1},
{1, 0, 0, 1},
{0, 1, 1, 0}
};
Graph G;
G.vertexNum = 4;
createGraph(&G, matrix);
// 输出邻接表
for (int i = 0; i adjvex);
p = p->next;
}
printf("n");
}
return 0;
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
chatGPT输出结果的质量高低,和你使用什么样质量的输入内容有关。 今天,小编整理了一些常用的ChatGPT指令,可以通过这些指令让AI帮你整理资料、撰写报告、知识学习、准备面试等等,赶紧收藏起来吧! 如果还没有找到工具,可以看看如下的AI工具箱。 所有提示…