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;
    }
    

    结果如下图:

      

    态度决定高度,细节决定成败,
  • 相关阅读:
    T4设计时模板调试
    MVC开发T4代码生成之一文本模板基础
    经典选项卡
    IE 调试工具 Utilu IE Collection:IE5.5、6.0、7.0, 8.0…各版本浏览器兼容性测试工具
    滚动读行!
    自定义标签的用法、支持IE6
    jQuery 参数传递例子
    IMG在IE6下不能HOVER的解决办法!
    点击渐变弹出层
    操作滚动条滚动到指定位置
  • 原文地址:https://www.cnblogs.com/lxk2010012997/p/3033292.html
Copyright © 2011-2022 走看看