#include<stdio.h>
#include <queue>//调用队列
#include<iostream>
using namespace std;
#define MVNun 100//最大定点数
#define MaxInt 0x3f3f3f3f//最大值
bool visited[MVNun];
typedef char VerTexType;//字符型顶点
typedef int ArcType;//整形权值
typedef struct WANG//网的邻接矩阵储存
{
VerTexType vexs[MVNun];//定点信息表
ArcType arcs[MVNun][MVNun];//邻接矩阵->对称矩阵压缩存储 sa[k]与a[i][j]的关系 k=i(i-1)/2+j-1 i>=j k=j(j-1)/2+i-1 i<j
int vexnum, arcnum;//网的当前点数和边数
}AMGraph;
typedef struct prim//prim算法辅助数组
{
VerTexType adjvex;//最小边在U中的那个顶点
ArcType lowcost;//最小边上的权值
}fuzhu;
void zuse()//清屏
{
cout << endl;
system("pause");
system("cls");
}
int LocateVex(AMGraph G1, VerTexType v)//查找
{
for (int i = 0; i < G1.vexnum; i++)
if (v == G1.vexs[i])
return i;
cout << "未查找该节点!" << endl;
}
int GreateUDN(AMGraph* G)//创建网
{
int i, j, k;
ArcType w = 0;
VerTexType v1, v2;
printf("输入总点数:");
cin >> G->vexnum;
printf("输入总边数:");
cin >> G->arcnum;
for (i = 0; i < G->vexnum; i++)//输入顶点信息
{
printf("输入第%d节点信息(名称):\n", i + 1);
cin >> G->vexs[i];
}
for (i = 0; i < G->vexnum; i++)//初始化化 压缩矩针
for ( j = 0; j < G->vexnum; j++)
G->arcs[i][j] = MaxInt;//初始化为最大值
for (k = 0; k < G->arcnum; k++)
{
printf("输入第%d边信息(例:顶点 a 顶点 b 权值 1 输入格式 ab1)\n", k + 1);
cin >> v1 >> v2 >> w;
i = LocateVex(*(G), v1);
j = LocateVex(*(G), v2);
G->arcs[j][i] = G->arcs[i][j] = w;
}
cout << "初始化完成!" << endl;
return 1;
}
int GreateUDN2(AMGraph* G)//创建网
{
int i, j, k;
ArcType w = 0;
VerTexType v1, v2;
printf("输入总点数:");
cin >> G->vexnum;
printf("输入总边数:");
cin >> G->arcnum;
for (i = 0; i < G->vexnum; i++)//输入顶点信息
{
printf("输入第%d节点信息(名称):\n", i + 1);
cin >> G->vexs[i];
}
for (i = 0; i <