邻接矩阵
存储表示
#define MaxInt 32767
#define MVNum 100
typedef char VerTexType;
typedef int ArcType;
typedef struct{
VerTexType vexs[MVNum];
ArcType arcs[MVNum][MVNum];
int vexnum,arcnum;
}AMGraph;
采用邻接矩阵创建无向图
Status CreateUDN(AMGraph &G){
cin>>G.vexnum>>G.arcnum;
for(i=0;i<G.vexnum;++i)
cin>>G.vexs[i];
for(i=0;i<G.vexnum;++i)
for(j=0;j<G.vexnum;++j)
G.arcs[i][j]=MaxInt;
for(k=0;k<G.arcnum;++k){
cin>>v1>>v2>>w;
i=LocateVex(G,v1);j=LocateVex(G,v2);
G.arcs[i][j]=w;
G.arcs[j][i]=G.arcs[i][j];
}
return OK;
}
邻接表
存储表示
#define MVNum 100
typedef struct ArcNode{//边结点
int adjvex;
struct ArcNode * nextarc;
}ArcNode;
typedef struct VNode{//顶点信息
VerTexType data;
ArcNode *firstarc;
}VNode,AdjList[MVNum];
typedef struct{//邻接表
AdjList vertices;
int vexnum,arcnum;
}ALGraph;
采用邻接表创建无向图
Status CreateUDG(ALGraph &G){
cin>>G.vexnum>>G.arcnum;
for(i=0;i<G.vexnum;++i){
cin>>G.vertices[i].data;
G.vertices[i].firstarc=NULL;
}
for(k=0;k<G.arcnum;++k){
cin>>v1>>v2;
i=LocateVex(G,v1);j=LocateVex(G,v2);
//确定v1和v2在G中的位置,即顶点在G.vertices中的序号
p1=new ArcNode;
p1->adjvex=j;
p1-nextarc=G.vertices[i].firstarc;G.vertices[i].firstarc=p1;
//将新结点*p1插入顶点vi的边表头部
p2=new ArcNode;
p2->adjvex=i;
p1-nextarc=G.vertices[j].firstarc;G.vertices[j].firstarc=p2;
}
return OK;
}