有向图的创建(邻接矩阵)

来源:互联网 发布:扫码查真伪的软件 编辑:程序博客网 时间:2024/05/22 02:45
// 图.cpp : 定义控制台应用程序的入口点。
//


#include "stdafx.h"
#include"malloc.h"
#define MAX_VERTEX_NUM 20
#define ERROR -1
#define OK 1
typedef int VertexType ;
typedef int InfoType;
typedef int Status;


typedef struct ArcNode{
int adjvex;
struct ArcNode *nextarc;
InfoType *info;
}ArcNode;
typedef struct VNode{
VertexType data;
ArcNode *finrstarc;
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct{
AdjList vertices;
int vexnum,arcnum;
int kind;
}ALGraph;
ALGraph G;
Status LocateVex(ALGraph G,int v){
for(int i=0;i<G.vexnum;i++)
{
if(G.vertices[i].data==v)
return i;
}
return ERROR;
}


Status CreateDG(ALGraph &G){
scanf("%d",&G.vexnum);
scanf("%d",&G.arcnum);
for(int i=0;i<G.vexnum;i++) scanf("%d",&G.vertices[i].data);
for(int i=0;i<G.vexnum;i++) G.vertices[i].finrstarc=NULL;
for(int k=0;k<G.arcnum;k++){
int i,j,v1,v2;
scanf("%d%d",&v1,&v2);
i=LocateVex(G,v1);
printf("%d",i);
j=LocateVex(G,v2);
ArcNode *p=(ArcNode *)malloc(sizeof(ArcNode));
ArcNode *q=(ArcNode *)malloc(sizeof(ArcNode));
if(!G.vertices[i].finrstarc)
G.vertices[i].finrstarc=p;
else{
for(q=G.vertices[i].finrstarc;q->nextarc;q=q->nextarc)
q->nextarc=p;
}
p->adjvex=j;
p->nextarc=NULL;
}
printf("%d %d",G.vexnum,G.arcnum);
return OK;
}
int _tmain(int argc, _TCHAR* argv[])
{
CreateDG(G);
printf("%d %d",G.vexnum,G.arcnum);
    ArcNode *q;
for(int i=0;i<G.vexnum;i++)
{
for(q=G.vertices[i].finrstarc;q->nextarc;q=q->nextarc)
{
printf("%d ",q->adjvex);
}
printf("\n");


}
return 0;
}