有向图邻接表
时间: 1ms 内存:128M
描述:
编写一个程序,用邻接表的形式存储下面这个图,要求以字典序递增存储。
输入:
输出:
输出数据每行一个节点,输出行数与节点数相同。
输出格式:
当前节点 ……邻接节点
比如:
0 1 2 3
示例输入:
示例输出:
提示:
参考答案(内存最优[0]):
#include<stdio.h>
int main()
{
printf("0 1 2 3\n1 2 4\n2 5\n3 5\n4 5\n5\n");
}
参考答案(时间最优[0]):
#include<stdio.h>
#include<stdlib.h>
typedef struct VNode
{
int adjvex;
struct ANode*nextarc;
//InfoType info;
}ArcNode;
typedef struct Vnode
{
int data;
ArcNode*firstarc;
}VNode;
typedef VNode AdjList[7];
typedef struct
{
AdjList adjlist;
int n,e;
}ALGraph;
int main()
{
ALGraph*G;
ArcNode *p;
int i,j;
G=(ALGraph*)malloc(sizeof(ALGraph));
G->e=8;
G->n=6;
for(i=0;i<G->n;i++)
{G->adjlist[i].firstarc=NULL;}
for(i=0;i<G->n;i++)
{G->adjlist[i].data=i;}
p=(ArcNode*)malloc(sizeof(ArcNode));
p->adjvex=5;
p->nextarc=G->adjlist[2].firstarc;
G->adjlist[2].firstarc=p;
p->nextarc=NULL;
p=(ArcNode*)malloc(sizeof(ArcNode));
p->adjvex=5;
p->nextarc=G->adjlist[3].firstarc;
G->adjlist[3].firstarc=p;
p->nextarc=NULL;
p=(ArcNode*)malloc(sizeof(ArcNode));
p->adjvex=5;
p->nextarc=G->adjlist[4].firstarc;
G->adjlist[4].firstarc=p;
p->nextarc=NULL;
p=(ArcNode*)malloc(sizeof(ArcNode));
p->adjvex=4;
p->nextarc=G->adjlist[1].firstarc;
G->adjlist[1].firstarc=p;
p=(ArcNode*)malloc(sizeof(ArcNode));
p->adjvex=3;
//printf("%d",G->adjlist[1].firstarc);
p->nextarc=G->adjlist[0].firstarc;
G->adjlist[0].firstarc=p;
p=(ArcNode*)malloc(sizeof(ArcNode));
p->adjvex=2;
p->nextarc=G->adjlist[1].firstarc;
G->adjlist[1].firstarc=p;
p=(ArcNode*)malloc(sizeof(ArcNode));
p->adjvex=2;
p->nextarc=G->adjlist[0].firstarc;
G->adjlist[0].firstarc=p;
p=(ArcNode*)malloc(sizeof(ArcNode));
p->adjvex=1;
p->nextarc=G->adjlist[0].firstarc;
G->adjlist[0].firstarc=p;
for(i=0;i<G->n;i++)
{
printf("%d ",G->adjlist[i].data);
p=G->adjlist[i].firstarc;
while(p!=NULL)
{
if(p->nextarc!=NULL)
printf("%d ",p->adjvex);
else
printf("%d\n",p->adjvex);
p=p->nextarc;
}
}
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。