图的存储结构——邻接表

来源:互联网 发布:js 对象访问器 编辑:程序博客网 时间:2024/05/17 08:47
#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;}

原创粉丝点击