您的位置:首页 > 其它

图的存储结构——邻接表

2017-08-16 10:45 204 查看
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
const int maxn=105;
typedef struct EdgeNode
{
int adjvex;
int weight;
struct EdgeNode *next;
}EdgeNode;

typedef struct VertexNode
{
int data;
EdgeNode *firstedge;
}VertexNode,AdjList[maxn];
typedef struct
{
AdjList adjlist;
int numv,nume;
}GraphAdjList;
void CreateALGraph(GraphAdjList *G)
{
int i,j,k;
EdgeNode *e;
printf("输入顶点数和边数\n");
scanf("%d%d",&G->numv,&G->nume);
printf("输入顶点信息\n");
for(i=0;i<G->numv;i++)
{
scanf("%d",&G->adjlist[i].data);
G->adjlist[i].firstedge=NULL;
}
printf("输入边的信息(i,j)\n");
for(k=0;k<G->nume;k++)
{
scanf("%d%d",&i,&j);
e=(EdgeNode *)malloc(sizeof(EdgeNode));
e->adjvex=j;
e->next=G->adjlist[i].firstedge;
G->adjlist[i].firstedge=e;
//printf("%d\n",G->adjlist[i].firstedge->adjvex);
e=(EdgeNode *)malloc(sizeof(EdgeNode));
e->adjvex=i;
e->next=G->adjlist[j].firstedge;
G->adjlist[j].firstedge=e;
//printf("%d\n",G->adjlist[j].firstedge->adjvex);
}
}
int main()
{
GraphAdjList *G=(GraphAdjList *)malloc(sizeof(GraphAdjList));
CreateALGraph(G);
for(int i=0;i<G->numv;i++)
{
printf("当前节点:%d ",G->adjlist[i].data);
EdgeNode *firstedge=G->adjlist[i].firstedge;
while(firstedge!=NULL)
{
printf("%d ",firstedge->adjvex);
firstedge=firstedge->next;
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: