帮我看看这些代码为什么运行不了,我缺少的MST.h文件应该是什么内容才能让这些正常运行在vs2013里写的
```c++
#include<vector>
#include<string>
#include<iostream>
using namespace std;
class MST{
public:
MST(){ pNumber = 0; map = NULL; }
~MST(){ delete []map; }
void createPoint(); //对应通信网造价模拟系统的A选项创建电网顶点
void addEdge(); //对应通信网造价模拟系统的B选项添加电网的边
void createTree(); //对应通信网造价模拟系统的C选项构造最小生成树
void displayTree(); //对应通信网造价模拟系统的D选项显示最小生成树
string findPoint(int iPos);//寻找pName中iPos位置的节点名称
bool judgePoint(int iPos); //判断iPos位置的点是否已经放入store容器中
int judgeEdge(int temp); //判断是否存在权值比temp数值还小的边
private:
int pNumber; //通信网节点的个数
int iCount = 0; //通信网节点个数计数器
int iStart; //起始点位置对应pName中的位置
int iWeight; //存在比temp数值更小的边的权
int **map; //用于存储各边之间的权
string start; //起始点位置的名称
vector <string>pName; //存储所有节点的名称
vector<pair<int, int>>store;//store中的起点存储的每条边的终点和对应的权值
#include"MST.h"
using namespace std;
bool MST::judgePoint(int iPos){
for (int iX=0 ; iX < store.size(); iX++){
if (iPos == store[iX].first&&store[iX].second != 0)
return false; //store中存在这个点
}
return true; //store中不存在这个点
}
int MST::judgeEdge(int temp){
int iPos;
if (iCount == 1){ //第二个顶点开始的位置单独讨论
for (int iX = 0; iX < pNumber; iX++){
if (map[iStart][iX] < temp&&map[iStart][iX]>0 && map[iStart][iX] != store[0].second){
iWeight = map[iStart][iX];
return iX;
}
}
}
if(iCount>1){
int iPos = iCount-1;
for (iPos;iPos>=0;iPos--)
for (int iX = 0; iX < pNumber;iX++)
if (map[iPos][iX] < temp&&map[iPos][iX] != store[iPos].second&&map[iPos][iX]>0 && iX != iStart){
iWeight = map[iPos][iX];
return iX; //之前的顶点对应有权更小的边
}
}
return -1;//没有权更小的边
}
void MST::createTree(){
cout << "请输入起始顶点:";
cin >> start;
iCount = 0; //计数器每次操作前置0
int iPos,temp,iName; //iPos对应每次搜索的起点 temp对应起点对应的边的权 iName对应搜索后的终点
store.clear(); //store每次操作前清空
store.resize(pNumber);
for (iPos = 0; iPos < pNumber; iPos++){ //首先找到起始点对应pName中的位置
if (start == pName[iPos]){
iStart = iPos;
break;
}
}
while (iCount<pNumber-1){
if (iPos!=0) //搜索前分别讨论iPos为0时可能出现的不同状况
temp=map[iPos][0];
if (iPos == 0){
temp = map[iPos][1];
iName = 1;
}
for (int iX = 0; iX < pNumber; iX++){ //从起点开始搜寻周围权最小的边
if (temp>=map[iPos][iX] && map[iPos][iX]>0 && iPos != iX&&judgePoint(iX)){
if ((iCount != 0 && iPos != iStart||iCount==0&&iPos==iStart)&&iX!=iStart){
temp = map[iPos][iX];
iName = iX;
}
}
}
if (judgeEdge(temp) == -1){ //如果store之前的顶点不存在权比temp更小的边
store[iCount].second = temp;
store[iCount].first = iName;
}
if (judgeEdge(temp) != -1){ //如果存在权比temp更小的边
store[iCount].first = judgeEdge(temp);
store[iCount].second = iWeight;
}
iPos = store[iCount].first;
iCount++;
}
cout << "生成Prim最小生成树!"<<endl;
cout << endl;
}
void MST::createPoint(){
string name;
cout << "请输入顶点的个数:";
cin >> pNumber;
cout << "请依次输入各顶点的名称:" << endl;
for (int iX = 0; iX < pNumber; iX++){
cin >> name;
pName.push_back(name);
}
cout << endl;
}
void MST::addEdge(){
string pA, pB;
int iA = 0, iB = 0;
map = new int*[pNumber];
for (int iX = 0; iX < pNumber; iX++)
map[iX] = new int[pNumber];
for (int iX = 0; iX < pNumber - 1; iX++){
map[iX][iX] = 0;
cout << "请输入两个顶点及边: ";
for (int iY = iX + 1; iY < pNumber; iY++){
iA = iB = 0;
cin >> pA >> pB;
while (pA != pName[iA]) //搜索输入两个顶点对应的位置,并将权赋值到对应的map中
iA++;
while (pB != pName[iB])
iB++;
cin >> map[iA][iB];
if (iY != pNumber - 1)
cout << "请输入两个顶点及边: ";
}
}
for (int iX = 0; iX < pNumber; iX++){
for (int iY = 0; iY < iX; iY++){
map[iX][iY] = map[iY][iX];
}
}
cout << endl;
}
void MST::displayTree(){
string end;
string begin;
cout << "最小生成树的的顶点及边为:" << endl;
cout << endl;
cout << start << "-<" << store[0].second << ">-" << findPoint(store[0].first);
for (int iX = 1; iX < pNumber - 1; iX++){
if (store[iX].second == map[store[iX].first][iX]){//如果最小生成树没有分支
begin = findPoint(store[iX - 1].first);
end = findPoint(store[iX].first);
cout << " " << begin << "-<" << store[iX].second << ">-" << end;
}
else{//最小生成树存在分支,依据终点和权找到对应的起点
int iStart = store[iX].second;
int iJ = 0;
int iK = 0;
bool flag = false;
for (iJ = 0; iJ < pNumber; iJ++){
for (iK = 0; iK < pNumber; iK++){
if (map[iJ][iK] == iStart){
flag = true;
break;
}
}
if (flag == true)
break;
}
if (iK == store[iX].first){
begin = findPoint(iJ);
end = findPoint(iK);
cout << " " << begin << "-<" << store[iX].second << ">-" << end;
}
if (iJ == store[iX].first){
begin = findPoint(iK);
end = findPoint(iJ);
cout << " " << begin << "-<" << store[iX].second << ">-" << end;
}
}
}
cout << endl << endl;
}
string MST::findPoint(int iPos){
string point;
point = pName[iPos];
return point;
}
#include<iostream>
#include<vector>
#include"MST.h"
using namespace std;
void main(){
MST tree;
char order;
cout << "** 通信网造价模拟系统 **" << endl;
cout << "==============================================================" << endl;
cout << "** A---创建通信网顶点 **" << endl;
cout << "** B---添加通信网的边 **" << endl;
cout << "** C---构造最小生成树 **" << endl;
cout << "** D---显示最小生成树 **" << endl;
cout << "** E---退出 程序 **" << endl;
cout << "==============================================================" << endl<<endl;
cout << "请选择操作:";
cin >> order;
while (order!='E'){
switch (order)
{
case 'A':
tree.createPoint();
break;
case 'B':
tree.addEdge();
break;
case 'C':
tree.createTree();
break;
case 'D':
tree.displayTree();
default:
break;
}
cout << "请选择操作:";
cin >> order;
}
}
```