// CreateGraph_OrthogonalList.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
typedef int NodeType;
#define MAXVEX 100
typedef struct EdgeNode
{
NodeType tailvex;//弧起点在顶点表的下标
NodeType headvex;//弧终点在顶点表的下标
struct EdgeNode* headlink;//入边表指针域,指向终点相同的下一条边
struct EdgeNode* taillink;//出边表指针域,指向起点相同的下一条边
}EdgeNode;
typedef struct VertexNode
{
NodeType data;
EdgeNode* firstin; //指向该顶点的入边表中的第一个顶点
EdgeNode* firstout; //指向该顶点的出边表的第一个顶点
}VertexNode, VerNodeList[MAXVEX];
typedef struct
{
int NumNode,NumEdge;
VerNodeList list;
}GraphList;
void CreateGraph(GraphList* G)
{
//初始化图表
int u,v,t;
printf("请输入图结点和边的个数:\n");
scanf("%d,%d",&G->NumNode,&G->NumEdge);
//初始化顶点表指针
printf("初始化顶点表指针\n");
for (int i=0;i<G->NumNode;i++)
{
printf("请输入第%d个顶点的下标\n",i+1);
scanf("%d",&t);
G->list[i].data=t;
G->list[i].firstin=NULL;
G->list[i].firstout=NULL;
}
printf("请输入边的两个端点结点的下标\n");
for (int j=0;j<G->NumEdge;j++)
{
printf("请输入两个坐标:\n");
scanf("%d,%d",&u,&v);
EdgeNode* e=new EdgeNode;
//头插法
e->tailvex=u;
e->headvex=v;
e->taillink=G->list[u].firstout;
G->list[u].firstout=e;
e->headlink=G->list[v].firstin;
G->list[v].firstin=e;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
GraphList G;
CreateGraph(&G);
return 0;
}