using namespace std;
typedef enum {DG,DN,UDG,UDN} GraphKind;
typedef struct
{
char vertex[MAX_VERTEX_NUM];
int Arc[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
int vexNum, arcNum;
int kind;
}MGraph;
//在图中找到点的位置
int LocateVex(MGraph *G,char ch)
{
for(int i = 0; i < G->vexNum; ++i)
{
if(G->vertex[i] == ch)
{
return i;
}
}
return -1;
}
//创建图
void createGraph(MGraph *&graph,int kind)
{
graph = new MGraph;
graph->kind = kind;
cout <<"请输入图的顶点数和边数:"<<endl;
cin >> graph->vexNum >>graph->arcNum;
cout <<"请输入顶点:"<<endl;
for(int i = 0; i < graph->vexNum; ++i)
{
cin >> graph->vertex[i];
}
//初始化图的矩阵
for(int i = 0; i <graph->vexNum; ++i)
for(int j = 0; j < graph->vexNum; ++j)
{
graph->Arc[i][j] = INFINITY;
}
cout <<"请输入边:"<<endl;
char point1,point2;
int weight = 0;
for(int i = 0; i < graph->arcNum; ++i)
{
cin >> point1>>point2 >>weight;
int index1 = LocateVex(graph,point1);
int index2 = LocateVex(graph,point2);
graph->Arc[index1][index2] = weight;
if(graph->kind == UDN)
{
graph->Arc[index2][index1] = weight;
}
}
}
//输出图
void printGraph(MGraph *G)
{
cout <<"图的矩阵表示:"<<endl;
for(int i = 0; i < G->vexNum; ++i)
{
for(int j =0; j < G->vexNum; ++j)
{
cout << G->Arc[i][j]<<" ";
}
cout <<endl;
}
}
int main()
{
MGraph *graph;
int kind;
cout << "请输入你的图的种类: 0--有向图 1--有向网 2--无向图 3--无向网"<<endl;
cin >> kind;
createGraph(graph,kind);
printGraph(graph);
delete graph;
return 0;
}