好题。这题可以有三种解法:1.Dijkstra   2.优先队列   3.并查集

我这里是优先队列的实现,以后有时间再用另两种方法做做。。方法就是每次都选当前节点所连的权值最大的边,然后BFS搜索。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <string>
#include <vector>
#include <map>
#include <queue>
#include <functional>
using namespace std;
#define N 100007struct node
{int ind,wt;bool operator < (const node &a)const{return wt<a.wt;}
};
int start,endi,n,m,res;
int way[203][203],vis[203][203];
map<string,int> mp;
priority_queue<node> que;void BFS()
{memset(vis,0,sizeof(vis));int i,maxi = 0,id;node now,next;for(i=1;i<=n;i++){if(way[start][i] > maxi){maxi = way[start][i];id = i;}}now.ind = id;now.wt = maxi;que.push(now);//printf("%d %d\n",start,endi);//printf("%d %d\n",now.ind,now.wt);res = 0;while(!que.empty()){now = que.top();que.pop();if(now.ind == endi){if(now.wt > res)res = now.wt;while(!que.empty())que.pop();return;}for(i=1;i<=n;i++){if(way[now.ind][i] && !vis[now.ind][i]){vis[now.ind][i] = vis[i][now.ind] = 1;next.ind = i;next.wt = min(now.wt,way[now.ind][i]);que.push(next);//printf("%d %d\n",next.ind,next.wt);
            }}}
}int main()
{int cs = 1,i,j,w,num;string city1,city2;node ka,kb;while(scanf("%d%d",&n,&m)!=EOF && (n||m)){mp.clear();num = 1;memset(way,0,sizeof(way));for(i=0;i<m;i++){cin>>city1;cin>>city2;scanf("%d",&w);if(!mp[city1])mp[city1] = num++;if(!mp[city2])mp[city2] = num++;way[mp[city1]][mp[city2]] = w;way[mp[city2]][mp[city1]] = w;}cin>>city1>>city2;start = mp[city1];endi = mp[city2];BFS();printf("Scenario #%d\n",cs++);printf("%d tons\n\n",res);}return 0;
}

View Code

转载于:https://www.cnblogs.com/whatbeg/p/3573051.html

POJ 2263 Heavy Cargo 多种解法相关推荐

  1. POJ 2263 Heavy Cargo

    这种是通行能力(可称容量)最大路,此种路称为最大容量路. 设城市i到城市j的承重载量w[i,j],则初始时从K到M没有直接路径,w[i, j] = 0; 假如中间点H后,K到M的载重量修改为:w[K, ...

  2. 算法:多数元素,多种解法

    前言: 以前做数学题的时候,老师说:你们学习多种解题方法.遇到类似不同的问题,你都会了,这样能提高解题能力.如果你写出多种解法,面试官会对你刮目相看. 下面一题,我们将用多种解法实现,是面试中常见的一 ...

  3. Minimum Inversion Number HDU - 1394(求一个数字环的逆序对+多种解法)

    题意: 给出n个数(0~n-1,每个数仅出现一次),问它长为n的循环序列中逆序对最少的数量. 多种解法:暴力+树状数组+分治+规律推导公式 题目: The inversion number of a ...

  4. 计算机求百钱买百鸡采用的算法,多种解法求百钱百鸡问题.doc

    多种解法求百钱百鸡问题 学 号: 0121210680225 <算法设计与分析B> 大 作 业 题 目多种解法求百钱百鸡问题学 院计算机科学与技术学院专 业软件工程班 级Sy1201姓 名 ...

  5. 最大公约数(gcd)和最小公倍数(lcm)的多种解法 Java 实现

    下面总共介绍了四种最大公约数的求解方法和一个最小公倍数的求解方法 该代码的视频讲解 [300题刷题挑战]leetcode力扣 最大公约数和最小公倍数的多种解法 GCDandLCM第八十三题 | 数学方 ...

  6. 算法笔记_001:斐波那契数的多种解法(Java)

    本篇文章解决的问题来源于算法设计与分析课程的课堂作业,主要是运用多种方法来计算斐波那契数.具体问题及解法如下: 一.问题1: 问题描述:利用迭代算法寻找不超过编程环境能够支持的最大整数的斐波那契数是第 ...

  7. POJ 2263 floyd思想

    http://poj.org/problem?id=2263 题意:汽车的载重量没有限制,取决于道路的承载能力,求起点到终点所经过的路径不会超过道路的承载限制. 分析:本题并不是求最短路径,而是求通过 ...

  8. Dijkstra解决POJ 2263

    题目:http://poj.org/problem?id=2263 题目大意:有n个城市,r条连接两个城市的道路,每条道路有自己的最大复载量.现在问从城市cst到城市cen,车上的最大载重能为多少. ...

  9. python解决换零钱问题_多种解法解决“零钱兑换”问题

    最近在LeetCode上刷算法题,准备秋招.刷了一些题之后,发现有些题非常棒,能够将多种知识点结合在一起.本文就以"零钱兑换"问题为例,展示同一道题的多种不同解法. 零钱兑换问题 ...

最新文章

  1. Rancher使用入门
  2. Missing separate debuginfos, use: debuginfo-install
  3. postman中设置关联点
  4. Spring Boot文档阅读笔记-构建SOAP的web Service Client
  5. C#颜色和名称样式对照表
  6. (转) Arcgis4js实现链家找房的效果
  7. 灯珠电路图_可充电led台灯电路图
  8. Atitit.mssql 数据库表记录数and 表体积大小统计
  9. Restful API 的设计规范
  10. 第1期丨每周软件网站白嫖
  11. WP网站主页备案号存放代码
  12. matlab中marker太密,Matlab画图时Marker过多的解决方法.pdf
  13. 2022年南京大学软件工程专硕上岸经验帖
  14. 特征多项式法(characteristic polynomial )求特征值(结合lanczos和householder)(python,数值积分)
  15. 爬虫模拟用户增加阅读量
  16. CSS属性多个子容器时使用flex-shrink 计算比例
  17. 基于MATLAB平台实现红绿灯(交通灯)识别
  18. ZTree学习(三),ztree树扩展
  19. 曾仕强经典语录-《易经的智慧》
  20. linux nobody用户是什么 nobody用户介绍

热门文章

  1. Windows下的函数
  2. selenium webdriver 实现Canvas画布自动化测试
  3. 给tomcat 配置https
  4. 【快速入门ORM框架之Dapper】大牛勿进系列
  5. ASP.NET的IIS映射
  6. 《面向对象程序设计》课程作业(七)
  7. 银行科技管理工作优化提升之我见
  8. 作为前端,你需要懂得javascript实现继承的方法
  9. 计算机视觉中的牛人贡献及其主页
  10. Linux驱动(13)--传递参数