TOJ--2119--最小生成树和map

本文讨论了如何利用Prim算法解决最小生成树问题,并通过代码实例展示了解题过程。主要内容包括算法实现细节和数据处理技巧。

这题 唯一的价值应该就是 稍微用了下map 同时也算自己对于prim算法的再次练手吧.....

    touch me

其余的 没什么好讲的 就是保留1位小数 这边的数据范围 题目没有给出 我也一直不知道......明天 考6J了.....

说些什么 上帝才能听到我的祈求呢~

  1 // TOJ 2119 最小生成树
  2 
  3 #include <iostream>
  4 #include <cstdio>
  5 #include <cstring>
  6 #include <map>
  7 using namespace std;
  8 
  9 const int size = 520;
 10 const double inf = 888888888.0;
 11 double length;
 12 int n;
 13 string name;
 14 struct data
 15 {
 16     int num;
 17     int next[50];
 18     double dist[50];
 19 }edge[size];
 20 map<string,int>mp;
 21 bool vis[size];
 22 double dist[size];
 23 
 24 void prim()
 25 {
 26     int i , j , k;
 27     memset( vis , false , sizeof(false) );
 28     for( i = 0 ; i<size ; i++ )
 29     {
 30         dist[i] = (i==0)?0:inf;
 31     }
 32     for( i = 0 ; i<edge[0].num ; i++ )
 33     {
 34         dist[ edge[0].next[i] ] = edge[0].dist[i];
 35     }
 36     vis[0] = true;
 37     double ans = 0;
 38     double mmin;
 39     for( i = 1 ; i<n ; i++ )
 40     {
 41         mmin = inf;
 42         for( j = 1 ; j<n ; j++ )
 43         {
 44             if( !vis[j] && dist[j]<mmin )
 45             {
 46                 mmin = dist[j];
 47                 k = j;
 48             }
 49         }
 50         if( mmin == inf )
 51         {
 52             break;
 53         }
 54         vis[k] = true;
 55         ans+=mmin;
 56         for( j = 0 ; j<edge[k].num ; j++ )
 57         {
 58             if( dist[ edge[k].next[j] ] > edge[k].dist[j]  && !vis[ edge[k].next[j] ]  )
 59             {
 60                 dist[ edge[k].next[j] ] = edge[k].dist[j];
 61             }
 62         }
 63     }
 64     if( ans<=length )
 65         printf( "Need %.1lf miles of cable\n",ans );
 66     else
 67         printf( "Not enough cable\n" );
 68 }
 69 
 70 int main()
 71 {
 72     char st[30] , end[30];
 73     double len;        
 74     int m;
 75     int cnt;
 76     while( ~scanf("%lf",&length) )
 77     {
 78         mp.clear();
 79         for( int i = 0 ; i<size ; i++ )
 80             edge[i].num = 0;
 81         cnt = 0;
 82         scanf( "%d",&n );
 83         for ( int i = 0 ; i<n ; i++ )
 84         {
 85             cin>>name;
 86             mp[name] = cnt++;  // 将人名映射为数字
 87         }
 88         scanf( "%d",&m );
 89         while( m-- )
 90         {
 91             scanf( "%s %s %lf",st,end,&len );
 92             int x = mp[st];
 93             int y = mp[end];
 94             edge[x].next[ edge[x].num ] = y;
 95             edge[x].dist[ edge[x].num++ ] = len;
 96             edge[y].next[ edge[y].num ] = x;
 97             edge[y].dist[ edge[y].num++ ] = len;
 98         }
 99         prim();
100     }
101     return 0;
102 }
View Code

 

转载于:https://www.cnblogs.com/radical/p/3787593.html

考虑柔性负荷的综合能源系统低碳经济优化调度【考虑碳交易机制】(Matlab代码实现)内容概要:本文围绕“考虑柔性负荷的综合能源系统低碳经济优化调度”展开,重点研究在碳交易机制下如何实现综合能源系统的低碳化与经济性协同优化。通过构建包含风电、光伏、储能、柔性负荷等多种能源形式的系统模型,结合碳交易成本与能源调度成本,提出优化调度策略,以降低碳排放并提升系统运行经济性。文中采用Matlab进行仿真代码实现,验证了所提模型在平衡能源供需、平抑可再生能源波动、引导柔性负荷参与调度等方面的有效性,为低碳能源系统的设计与运行提供了技术支撑。; 适合人群:具备一定电力系统、能源系统背景,熟悉Matlab编程,从事能源优化、低碳调度、综合能源系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究碳交易机制对综合能源系统调度决策的影响;②实现柔性负荷在削峰填谷、促进可再生能源消纳中的作用;③掌握基于Matlab的能源系统建模与优化求解方法;④为实际综合能源项目提供低碳经济调度方案参考。; 阅读建议:建议读者结合Matlab代码深入理解模型构建与求解过程,重点关注目标函数设计、约束条件设置及碳交易成本的量化方式,可进一步扩展至多能互补、需求响应等场景进行二次开发与仿真验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值