zoukankan      html  css  js  c++  java
  • 贪心算法最小生成树

    Prim算法实现

    代码如下:

    #include <iostream>
    using namespace std;
    
    typedef struct Node
    {
        int shortdist;         //用于记录到节点的最短距离
        int flag;               //用作标志变量,表示借点已经加入到集合中
        int prev;              //前驱结点
    } Node;
    void Prim(int map[][10],int num,Node *vertex)
    {
        for(int i=0;i<num;i++)
        {
            vertex[i].shortdist=map[0][i];
            vertex[i].flag=false;
            if(map[0][i]<100)
            vertex[i].prev=0;                      //前驱结点设置为-1,表示无前驱
            else
            vertex[i].prev=-1;
        }
        vertex[0].flag=true;
        //vertex[0].prev=0;
        int prev=0;
    
        for(int i=1;i<=num-1;i++)
        {
    
            int min=100;
            int position=-1;
            for(int j=0;j<num;j++)                 //找到一个最短的
            if(vertex[j].flag==false&&vertex[j].shortdist<min)
            {
                min=vertex[j].shortdist;
                position=j;
            }
            vertex[position].flag=true;
            //vertex[position].prev=
    
            for(int j=0;j<num;j++)               //用新加入的节点更新
            if(vertex[j].flag==false&&map[position][j]<vertex[j].shortdist)
            {
                vertex[j].shortdist=map[position][j];
                vertex[j].prev=position;
            }
        }
        int sum=0;
        cout<<"1节点生成的最小生成树:"<<endl;
        for(int i=0;i<num;i++)
        {
            cout<<"节点:"<<i+1<<" 最短距离: "<<vertex[i].shortdist<<" 前一个连接节点为: "<<vertex[i].prev+1<<endl;
            sum+=vertex[i].shortdist;
        }
        cout<<"总长度为:"<<sum;
    
    }
    int main()
    {
        int map[10][10],row,col;
        cin>>row>>col;
        if(row!=col)
        {
            cout<<"Wrong!"<<endl;
            return 0;
        }
        int num=row;
        Node *vertex=new Node[col];
        for(int i=0;i<num;i++)
            for(int j=0;j<num;j++)
                cin>>map[i][j];                   //节点间距离为0-99,100表示无穷远
        Prim(map,num,vertex);
        return 0;
    }
    

    结果如下图:

      

    态度决定高度,细节决定成败,
  • 相关阅读:
    第三周作业
    第二周作业 编程总结
    编程总结二 求最大值及其下标
    编程总结一 查找整数
    第十周课程总结
    第九周课程总结&实验报告(七
    第八周课程总结&实验报告(六)
    第七周课程总结&实验报告(五)
    第六周&java实验报告四
    第五周的作业
  • 原文地址:https://www.cnblogs.com/lxk2010012997/p/3033292.html
Copyright © 2011-2022 走看看