代码中所用到的结构体
typedef struct arcnode
{
int adjvex;
struct arcnode *next;
}Arcnode,*pArcnode;
typedef struct vnode
{
pArcnode firstarc;
}Vnode,AdjList[30];
typedef struct graph
{
int Vnum,Arcnum;
AdjList vertice;
}Graph,*pGraph;
邻接表构造无向图
- 首先输入图的总边数和总点数,通过输入边的起始点和终点,来确立点和点之间的关系
- 注意点1:要申请两个新的指针p1,p2。p1从起始点指向终点,p2从终点指向起始点。以此通过两个有向的边构成一个无向的边。
- 注意点2:注意每个点的头指针为空和不为空的情况是不一样的。
void CreateGraph(pGraph G)
{
int i;
int node1,node2;
pArcnode p1,p2;
printf("请输入无向图的总点数:\n");
scanf("%d",&G->Vnum);
getchar();
for(i=0;i<G->Vnum;i++)
{
G->vertice[i].firstarc=NULL;
}
printf("请输入无向图的总边数:\n");
scanf("%d",&G->Arcnum);
getchar();
printf("请输入点和点之间的连接:(例:1 5)\n");
for(i=0;i<G->Arcnum;i++)
{
scanf("%d %d",&node1,&node2);
getchar();
p1=(pArcnode)malloc(sizeof(Arcnode));
p2=(pArcnode)malloc(sizeof(Arcnode));
p1->adjvex=node1;
p1->next=NULL;
p2->adjvex=node2;
p2->next=NULL;
if(G->vertice[node1].firstarc==NULL&&G->vertice[node1]