//严蔚敏《数据结构》
//图的存储结构:数组表示法(邻接矩阵)
//自学中,加油!
#include<iostream>
#include<string>
using namespace std;
const int MaxVertexnum=20;
const int Infinity=INT_MAX;
#define InfoType string
#define VRType double
#define VertexType char
typedef enum{DG,DN,UDG,UDN} GraphKind;//不能#define GrapKind enum{DG,DN,UDG,UDN}
typedef struct
{
VRType adj;
InfoType* info;
}ArcCell,AdjMatrix[MaxVertexnum][MaxVertexnum];
typedef struct
{
VertexType vers[MaxVertexnum];
AdjMatrix arcs;
int vernum,arcnum;
GraphKind kind;
}MGraph;
int LocateVex(MGraph G,VertexType v)//返回点v在G.vers中的下标
{
for(int i=0;i!=G.vernum;i++){
if(G.vers[i]==v)
return i;
}
return -1;
}
void CreatDG(MGraph& G)//创建有向图
{
cout<<"输入有向图的点和弧的数量:";
cin>>G.vernum>>G.arcnum;
cout<<"输入"<<G.vernum<<"个点(类型为char)\n";
for(int i=0;i!=G.vernum;i++)
cin>>G.vers[i];
for(int i=0;i!=G.vernum;i++){//初始化邻接矩阵
for(int j=0;j!=G.vernum;j++){
G.arcs[i][j].adj=0;
G.arcs[i][j].info=nullptr;
}
}
VertexType v1,v2;
int i,j;
for(int k=0;k!=G.arcnum;k++){
cout<<"输入两个点以及两个点的信息\n";
cin>>v1>>v2;
i=LocateVex(G,v1);j=LocateVex(G,v2);
G.arcs[i][j].adj=1;
}
}
void CreatDN(MGraph& G)//创建有向网
{
cout<<"输入有向网的点和弧的数量:";
cin>>G.vernum>>G.arcnum;
cou