#define maxvernum 100//最大顶点数为100
typedef struct node //边表结点
{
int adjvex;//邻接点域
struct node * next;//指向下一个邻接点的指针域
}Edgenode;
typedef struct vnode//表头结点
{
int vertex;//顶点域
Edgenode * link;//边表头指针
}Vexnode;
typedef Vexnode adjlist[maxvernum];//adjlist是邻接表类型
typedef struct
{
adjlist adjlist;//邻接表
int n,e; //顶点数和边数
}Adjgraph;//Adjgraph是以邻接表方式存储的图类型
//有向图的算法如下:
void greatealgraph(Adjgraph * g)//建立有向图的邻接表存储
{
int i,j,k;
Edgenode * s;
printf("请输入顶点数和边数(输入格式为:顶点数,边数):\n");
scanf("%d,%d",&(g->n),&(g->e));
printf("请输入顶点信息(输入格式为:顶点号<CR>):\n");
for(i=0;i<g->n;i++)//建立有n个顶点的顶点表
{
scanf("\n%c",&(g->adjlist[i].vertex));
g->adjlist[i].link=NULL;//设为空表头指针
}
printf("请输入边的信息(输入格式为:i,j):\n");
for(k=0;k<g->e;k++)//建立边表
{
scanf("\n%d,%d",&i,&j);//读入边<vi,vj>的顶点对应序号
s=(Edgenode*)malloc(sizeof(Edgenode));//生成新的边表结点s
s->adjvex=j;//邻接点序号为j
s->next=g->adjlist[i].link;
g->adjlist[i].link=s;
}
}
图的邻接表算法
最新推荐文章于 2024-08-25 10:23:41 发布