博客
关于我
2-2 畅通工程之局部最小花费问题 (30分)
阅读量:318 次
发布时间:2019-03-04

本文共 1242 字,大约阅读时间需要 4 分钟。

某地区经过对城镇交通状况的调查,得到现有城镇间快速道路的统计数据,并提出“畅通工程”的目标:使整个地区任何两个城镇间都可以实现快速交通(但不一定有直接的快速道路相连,只要互相间接通过快速路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建快速路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全地区畅通需要的最低成本。

输入格式:
输入的第一行给出村庄数目N (1≤N≤100);随后的N(N−1)/2行对应村庄间道路的成本及修建状态:每行给出4个正整数,分别是两个村庄的编号(从1编号到N),此两村庄间道路的成本,以及修建状态 — 1表示已建,0表示未建。

输出格式:
输出全省畅通需要的最低成本。

输入样例:

41 2 1 11 3 4 01 4 1 12 3 3 02 4 2 13 4 5 0

输出样例:

3

程序如下:

#include <bits/stdc++.h>using namespace std;#define INF 10000int a[100][100];int b[100];int c[100];int main(){       int N,sum=0;    cin>>N;    for(int i=1;i<=N*(N-1)/2;i++)    {           int q,w,e,r;        cin>>q>>w>>e>>r;        if(r==1)			a[q][w]=0;        else         {           	a[q][w]=e;        	a[w][q]=a[q][w];		}    }    c[1]=1;    for(int i=1;i<=N;i++)    {           b[i]=a[1][i];    }    int count=1;    while(count<N)    {           int min=INF;        int j=0;        for(int i=1;i<=N;i++)        {               if(c[i]==0&&b[i]<min)            {                   min=b[i];                j=i;            }        }        c[j]=1;        count++;        sum=sum+min;        for(int i=1;i<=N;i++)        {               if(c[i]==0&&b[i]>=a[j][i])            {                   b[i]=a[j][i];            }        }    }    cout<<sum;    return 0;}

转载地址:http://afzh.baihongyu.com/

你可能感兴趣的文章
函数指针的典型应用-计算函数的定积分(矩形法思想)
查看>>
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
查看>>
用 wxPython 打印你的 App
查看>>
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
查看>>
android:使用audiotrack 类播放wav文件
查看>>
vue通过better-scroll 封装自定义的下拉刷新组件
查看>>
android解决:使用多线程和Handler同步更新UI
查看>>
Element UI 中动态路由的分析及实现
查看>>
使用springMVC配置视图管理器后找不到指定的页面
查看>>
杭电 2007 平方和与立方和(输入数据的大小顺序并不能默认)
查看>>
十大排序算法之三:插入排序(Python)
查看>>
利用递归实现二叉树的前中后序遍历(Python)
查看>>
合并两个有序数组
查看>>
聊聊我的五一小假期
查看>>
Vue新建项目——页面初始化
查看>>
Node.js包使用系列(一)——修改NPM全局下载和缓存路径
查看>>
CSS position属性static/relative/absolute/fixed/sticky用法总结
查看>>
6.14编一个程序,将两个字符串s1和s2比较,不要用strcmp函数。
查看>>
Java纯文本文件显示工具制作
查看>>
三、案例:留言板 & url.parse()
查看>>