#include<bits/stdc++.h>
using namespace std;
#define OK 1
typedef enum{DG,DN,UDG,UDN} GraphKind;
typedef int Status;
typedef int VertexType;
typedef char InfoType;
typedef struct ArcNode//当前结点指向的弧
{
int adjvex;
struct ArcNode* nextarc;
InfoType *info;
}ArcNode;
typedef struct VNode//结点
{
VertexType data;
ArcNode *firstarc;
}VNode,*AdjList;
typedef struct//邻接表图
{
AdjList vertices;
int vexnum,arcnum;
GraphKind kind;
}AlGraph;
//邻接表图的创建
Status CreatDN(AlGraph &G)
{
int IncInfo;//是否输入弧的附加信息
cin>>G.vexnum>>G.arcnum>>IncInfo;
for(int i=0;i<G.vexnum;i++)//构造表头
{
cin>>G.vertices[i].data;
G.vertices[i].firstarc=NULL;
}
for(int k=0;k<G.arcnum;k++)//以弧为单位输入
{
char v1,v2;
int w,i,j;
cin>>v1>>v2>>w;
i=LocateVex(G,v1);
j=LocateVex(G,v2);
ArcNode* arc=(ArcNode*)malloc(sizeof(ArcNode));
arc->adjvex=j;//j为弧头结点
if(IncInfo)cin>>arc->info;
arc->nextarc=G.vertices[i].firstarc;//插在表头
G.vertices[i].firstarc=arc;
}
return OK;
}
用邻接表表示有向图
最新推荐文章于 2023-12-04 18:26:03 发布