题目:http://poj.org/problem?id=2263

题目大意:有n个城市,r条连接两个城市的道路,每条道路有自己的最大复载量。现在问从城市cst到城市cen,车上的最大载重能为多少。

 
虽然是提交了,也搞懂了,但是还没有彻底的明白。
因此,也不便多说什么,当我彻底明白的时候再说吧。
 
呵呵,终于完全的明白了,下面指出一二。
1.一定要明白map[][]的双关性,何为双关?
  (1).map[i][j]表示i到j的距离
  (2).map[i][j]=0表示i到j不可以直接可达
  要达到这种效果,首先将map[][]全部赋值为0,
  然后存储建图,在建图的过程中自然的将直接可达
  的两点赋值为不是0的值了。
2.一定要明白dis[]是干什么用的,是干什么用的呢?
  dis[i]是用来存储要求解的start点到i的最优解的。
  一旦求出,将不会改动。当i=end的时候,也就是得到
  答案的时候。
3.一定要明白visited[]是干什么用的,干什么用的?
 当visited[i]=0,表示i点并没有加入到已经解出的
  集合中,也就是说,下次循环的时候是要访问的对象。
  当visited[i]=1,表示i点已经加入到了解出的集合
  中,下次循环的时候,不能再次访问它了。
好了,就这些了,多了没有,不信你还是不懂!
View Code

#include "iostream"
using namespace std;
char name[201][500];
int map[201][201];  ////用来存储图,map[i][j]用来表示权值,也就是距离了——i到j的距离
int visited[201];  //用来表示某个顶点是否加入到顶点的集合
int dis[201];  //dis[i]用来表示距离——start点到i点的距离
int begin, end, sum;
int Min(int a, int b)
{return a>b?b:a;
}
int Str_Int(char name1[]) //将字符串转化成一定的数字
{int i;for(i=0; i<sum; i++)if(strcmp(name1, name[i])==0)return i+1;strcpy(name[sum++], name1);  return sum;
}
int Dijkstra(int n)
{memset(visited, 0, sizeof(visited));memset(dis, 0, sizeof(dis));int now = begin, count = n-1, i;  //count是个细节visited[begin] = 1;dis[begin] = 999999;  //这个十分的关键哟,不然下面的for循环无法工作while(count--){int k, maxdistance = 0;for(i=1; i<=n; i++){if(!visited[i])  //没有加入集合的话,就访问它
            {if(map[now][i]!=0)  //两点可以直接到达的话if(dis[i] < Min( dis[now], map[now][i]))//dis[i]不可以比dis[now]更大,但是可以更小,所以用Mindis[i] = Min(,dis[now], map[now][i]);if(maxdistance < dis[i])maxdistance = dis[k=i];  //k用来存储距离now最短的顶点
            }}if(k==end)    break;visited[now=k] = 1;  //将k放入集合中,并以k为下一个now,再次寻找下一个距离now最短的顶点
    }return dis[end];
}
int main()
{int n, r, i, node1, node2, val;char name1[200], name2[200];char st[200], en[200];int k=0;while(cin>>n>>r && (n+r)){k++;sum = 0;memset(name, 0, sizeof(name));memset(map, 0, sizeof(map));for(i=0; i<r; i++){cin>>name1>>name2>>val;node1 = Str_Int(name1);node2 = Str_Int(name2);map[node1][node2]=map[node2][node1]=val;}cin>>st>>en;begin = Str_Int(st);end = Str_Int(en);cout<<"Scenario #"<<k<<endl<<Dijkstra(n)<<" tons"<<endl<<endl;}return 0;
}

转载于:https://www.cnblogs.com/o8le/archive/2011/10/03/2198695.html

Dijkstra解决POJ 2263相关推荐

  1. POJ 2263 floyd思想

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

  2. POJ 2263 Heavy Cargo 多种解法

    好题.这题可以有三种解法:1.Dijkstra   2.优先队列   3.并查集 我这里是优先队列的实现,以后有时间再用另两种方法做做..方法就是每次都选当前节点所连的权值最大的边,然后BFS搜索. ...

  3. Huffman和Priority_queue 解决POJ 1521

    题目:http://poj.org/problem?id=1521 题目大意:给定字符串,求哈夫曼编码长和它与等长编码的比值 做这道题目的时候wrang了好几次,但是, 经过调试之后,我彻底了解了哈夫 ...

  4. poj 2263 最短路变形——最小边的最大值

    文章目录 本题:最短路变形--最小边的最大值 最短路变形--最大边的最小值 本题:最短路变形--最小边的最大值 最短路变形--最大边的最小值 poj2253

  5. POJ 2263 Heavy Cargo

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

  6. POJ 3268 (dijkstra算法)

    Silver Cow Party Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N  ...

  7. POJ - 2456 二分解决

    使用二分和贪心方法解决 POJ -2456 #include <iostream> #include<algorithm> #include<cstdio> #in ...

  8. POJ 图论---1_Uriel's Corner Uriel's Coding Learning Cubing Zone

    原文地址: http://www.cppblog.com/Uriel/articles/121814.html 内容: 刚开始学图论不久,这个是自己做过的一点图论水题,不一定全,有什么错误或者大家有其 ...

  9. 最短路算法详解(Dijkstra/SPFA/Floyd)

    转自:http://blog.csdn.net/murmured/article/details/19281031 一.Dijkstra Dijkstra单源最短路算法,即计算从起点出发到每个点的最短 ...

最新文章

  1. 『并发包入坑指北』之阻塞队列
  2. jQuery+Ajax+PHP 制作简单的异步数据传输(测试用户名是否可用)
  3. numpy报错:ValueError: numpy.ufunc size changed, may indicate binary incompatibility.
  4. setTimeout() 实现程序每隔一段时间自动执行
  5. PLSQL 申明和游标
  6. 上云难?TA霸气回应:不要你觉得,一键上云 so easy!
  7. Visual Studio 安装失败
  8. Ubuntu16.04 安装Maven 3.5.3
  9. StackExchange.Redis 使用LuaScript脚本模糊查询hash
  10. 超级有用的git reset --hard和git revert命令
  11. 勿让“天地图”成绿坝第二
  12. 从阿里双十一看云计算
  13. 新数据时代,浪潮存储如何革故鼎“新”
  14. 树莓派4b 3.5inch显示屏+远程+FTP+建站
  15. [低级错误]an attribute defined in * line * hides this method pylint (method-hidden)
  16. linux从零基础开始
  17. 3DMAX文件导入到OSG中。
  18. fiddler抓包小红书app(简易版)
  19. scrapy shell 调试报错TypeError: module.__init__() takes at most 2 arguments (3 g iven)
  20. DM数据库:springboot+mybaits

热门文章

  1. button的onclick函数一直刷新
  2. Yii中常用路径(转)
  3. UI进阶--UIPikcerView实现省市联动示例
  4. poj1094Sorting It All Out(拓扑排序)
  5. [原创]从程序员角度分析安徽电信HTTP劫持的无耻行径 - 草根的暂时胜利
  6. (转)VS.NET使用
  7. Flutter Image 图片加载
  8. IOS启程06—iOS设置圆角图片
  9. JavaScript 中的string 方法
  10. Mr.J--树、二叉树、森林的转换