/*
邻接表构造图的数据结构
*/
#include<iostream>
#include<malloc.h>
using namespace std;
#define MaxVertexNum 20
typedef struct node //边表结点
{
int index; //节点的索引
node * next; //下一个节点地址
int weight; // 与顶点节点的权值(这里没用)
}EdgeNode;
typedef struct // 顶点表顶点
{
int index; // 邻接表顶点索引
EdgeNode * firstEdge; // 顶点所连接的第一个边节点的地址
}VertexNode;
typedef VertexNode AdjList[MaxVertexNum];
typedef struct
{
AdjList adjlist;
int n;
int e;
}Graph;
void createGraph(Graph * G)
{
int i,j,k;
EdgeNode *s;
printf("输入顶点数和边数\n");
scanf("%d %d",&G->n,&G->e);
// 建立顶点表
for(i = 1; i <= G->n; i++)
{
G->adjlist[i].index = i; // 输入顶点表的索引
G->adjlist[i].firstEdge = NULL; //顶点指向NULL
}
// 建立边表
for(k = 1; k <= G->e; k++)
{
printf("输入表节点:\n");
scanf("%d %d",&i,&j);
s = (EdgeNode *)malloc(sizeof(EdgeNode));
s->index = j;
s->next = G->adjlist[i].firstEdge;
G->adjlist[i].firstEdge = s;
s = (EdgeNode *)malloc(sizeof(EdgeNode));
s->index = i;
s->next = G->adjlist[j].firstEdge;
G->adjlist[j].firstEdge = s;
}
}
int main()
{
int i;
Graph * G = (Graph *)malloc(sizeof(Graph));
createGraph(G);
for(i = 1; i <= G->n; i++)
{
printf("%d->",i);
while(G->adjlist[i].firstEdge != NULL)
{
printf("%d->",G->adjlist[i].firstEdge->index);
G->adjlist[i].firstEdge = G->adjlist[i].firstEdge->next;
}
printf("\n");
}
return 0;
}
图的基本操作之构造图(邻接表)
最新推荐文章于 2024-08-02 23:56:05 发布
本文介绍如何使用邻接表数据结构来构建图,并提供了C++代码实现。通过输入顶点数和边数,程序创建图并打印出每个顶点的所有邻接节点。
摘要由CSDN通过智能技术生成