#include <iostream>
using namespace std;
//-------图的邻接矩阵存储表示-------
#define MaxInt 32767
#define MVNum 100
typedef char VerTexType;
typedef int ArcType;
typedef int Status;
typedef struct
{
VerTexType vexs[MVNum]; //顶点表
ArcType arcs[MVNum][MVNum]; //邻接矩阵
int vexnum, arcnum; //图的当前点数和边数
}AMGraph;
Status LocateVex(AMGraph G, VerTexType v)
{//确定顶点在无向网G中的位置
int i;
for (i = 0; i < G.vexnum; i++)
{
if (G.vexs[i] == v) break;
}
return i;
}
Status CreateUDN(AMGraph& G)
{//采用邻接矩阵表示法,创建无向网G
int i, j, k, w;
char v1, v2;
cout << "请输入总顶点数,总边数(以空格隔开):";
cin >> G.vexnum >> G.arcnum; //输入总顶点数,总边数
cout << "请输入点:";
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; //初始化邻接矩阵,边的权值均置为最大值
cout << endl << "请输入边依附的顶点及权值(例如a b 1)" << endl;
for (k = 0; k < G.arcnum; ++k) //构造邻接矩阵
{
cout << "请输入一条边及其权值:";
cin >> v1 >> v2 >> w; //输入一条边依附的顶点及权值
i = LocateVex(G, v1); j = LocateVex(G, v2);//确定点v1和点v2在无向网G中的位置,即顶点数组下标
G.arcs[i][j] = w; //边<v1,v2>的权值置为w;
G.arcs[j][i] = G.arcs[i][j]; //置<v1,v2>的对称边<v2,v1>的权值为w
}
return 0;
}
int main()
{
AMGraph G; //定义无向网G
CreateUDN(G); //创建无向网G
cout << endl << "*******邻接矩阵表示法创建的无向网*******" << endl;
for (int i = 0; i < G.vexnum; ++i)
{
for (int j = 0; j < G.vexnum; ++j)
{
if (G.arcs[i][j] == MaxInt)
{
cout << "∞" << " ";
}
else
{
cout << " " << G.arcs[i][j] << " ";
}
}
cout << endl;
}
return 0;
}
运行截图: