m0_65253423 2022-12-11 10:37 采纳率: 66.7%
浏览 15
已结题

我从别人那复制过来的但是找不到MST.h文件

帮我看看这些代码为什么运行不了,我缺少的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;
    }
}







```

  • 写回答

1条回答 默认 最新

  • 浪客 2022-12-11 11:05
    关注

    #include"MST.h"之前的部分保存为MST.h文件
    这行前面缺个花括号

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月19日
  • 已采纳回答 12月11日
  • 创建了问题 12月11日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助