一、题目

POJ2387

二、分析

Bellman-Ford算法

 该算法是求单源最短路的,核心思想就是不断去更新到起点的最短距离,更新的前提是没有负边。如果有负边需要手动控制循环次数。

Dijkstra算法

 同样是单源最短路,它的核心是

 (1) 找到最短距离已经确定的顶点,再从该顶点出发,更新与它相邻的点的最短距离。

 (2) 对于最短距离已经确定的点不再更新。

Floyd算法

 可以求解任意两点之间的最短距离。但是这题会TLE。

三、AC代码

 1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <vector>
5 #include <fstream>
6 using namespace std;
7 const int MAXN = 2e3+14;
8 const int INF = 0x3f3f3f3f;
9 struct edge
10 {
11 int from, to, cost;
12 }E[MAXN<<1];
13 int T, N, C;
14 int dist[MAXN];
15 void Bellman_Ford()
16 {
17 memset(dist, INF, sizeof(dist));
18 dist[1] = 0;
19 while(1)
20 {
21 bool flag = 0;
22 for(int i = 0; i < C; i++)
23 {
24 if(dist[E[i].from] != INF && dist[E[i].to] > dist[E[i].from] + E[i].cost)
25 {
26 dist[E[i].to] = dist[E[i].from] + E[i].cost;
27 flag = 1;
28 }
29 }
30 if(!flag)
31 break;
32 }
33 }
34 int main()
35 {
36 //freopen("in.txt", "r", stdin);
37 scanf("%d%d", &T, &N);
38 C = 0;
39 int a, b ,c;
40 for(int i = 0; i < T; i++)
41 {
42 scanf("%d%d%d", &a, &b, &c);
43 E[C].from = a, E[C].to = b, E[C].cost = c;
44 C++;
45 E[C].from = b, E[C].to = a, E[C].cost = c;
46 C++;
47 }
48 Bellman_Ford();
49 printf("%d\n", dist[N]);
50 return 0;
51 }

Bellman_Ford

 1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <vector>
5 #include <fstream>
6 #include <vector>
7 #include <queue>
8 using namespace std;
9 typedef pair<int, int> P;
10 const int MAXN = 2e3+14;
11 const int INF = 0x3f3f3f3f;
12 struct edge
13 {
14 int from, to, cost;
15 edge(int f, int t, int c)
16 {
17 from = f, to = t, cost = c;
18 }
19 };
20 vector<edge> G[MAXN];
21 priority_queue<P> pq;
22 int T, N;
23 int dist[MAXN];
24
25 void Dijkstra(int s)
26 {
27 memset(dist, INF, sizeof(dist));
28 dist[s] = 0;
29 pq.push(P(0, s));
30 while(!pq.empty())
31 {
32 P p = pq.top();
33 pq.pop();
34 int v = p.second;
35 if(dist[v] < p.first)
36 continue;
37 for(int i = 0; i < G[v].size(); i++)
38 {
39 edge e = G[v][i];
40 if(dist[e.to] > dist[v] + e.cost)
41 {
42 dist[e.to] = dist[v] + e.cost;
43 pq.push(P(dist[e.to], e.to));
44 }
45
46 }
47 }
48 }
49
50 int main()
51 {
52 //freopen("in.txt", "r", stdin);
53 scanf("%d%d", &T, &N);
54 int a, b ,c;
55 for(int i = 0; i < T; i++)
56 {
57 scanf("%d%d%d", &a, &b, &c);
58 G[a].push_back(edge(a, b, c));
59 G[b].push_back(edge(b, a, c));
60 }
61 Dijkstra(1);
62 printf("%d\n", dist[N]);
63 return 0;
64 }

Dijkstra

POJ_2387 Til the Cows Come Hom 【最短路】的更多相关文章

  1. Til the Cows Come Home 最短路Dijkstra+bellman(普通+优化)

    Til the Cows Come Home 最短路Dijkstra+bellman(普通+优化) 贝西在田里,想在农夫约翰叫醒她早上挤奶之前回到谷仓尽可能多地睡一觉.贝西需要她的美梦,所以她想尽快回 ...

  2. POJ2387 Til the Cows Come Home (最短路 dijkstra)

    AC代码 POJ2387 Til the Cows Come Home Bessie is out in the field and wants to get back to the barn to ...

  3. POJ-2387 Til the Cows Come Home ( 最短路 )

    题目链接: http://poj.org/problem?id=2387 Description Bessie is out in the field and wants to get back to ...

  4. Til the Cows Come Home(最短路模板题)

    Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Description Bessie is ...

  5. POJ 2387 Til the Cows Come Home(最短路模板)

    题目链接:http://poj.org/problem?id=2387 题意:有n个城市点,m条边,求n到1的最短路径.n<=1000; m<=2000 就是一个标准的最短路模板. #in ...

  6. POJ 2387 Til the Cows Come Home --最短路模板题

    Dijkstra模板题,也可以用Floyd算法. 关于Dijkstra算法有两种写法,只有一点细节不同,思想是一样的. 写法1: #include <iostream> #include ...

  7. POJ 2387 Til the Cows Come Home (最短路 dijkstra)

    Til the Cows Come Home 题目链接: http://acm.hust.edu.cn/vjudge/contest/66569#problem/A Description Bessi ...

  8. POJ 2387 Til the Cows Come Home 【最短路SPFA】

    Til the Cows Come Home Description Bessie is out in the field and wants to get back to the barn to g ...

  9. POj2387——Til the Cows Come Home——————【最短路】

    A - Til the Cows Come Home Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & ...

随机推荐

  1. vector最最最基础用法(非原创)

    在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结. 1 基本操作 (1)头文件#include<vector>. (2)创建vector对象,vector<in ...

  2. Java开发工程师最新面试题库系列——Java基础部分

    JAVA基础 面向对象有哪些特征? 答:继承.封装.多态 JDK与JRE的区别是什么? 答:JDK是java开发时所需环境,它包含了Java开发时需要用到的API,JRE是Java的运行时环境,JDK ...

  3. free website generator by google

    free website generator by google https://sites.google.com/view/webgeeker-xyz/首页 https://sites.google ...

  4. Flutter for web

    Flutter for web https://flutter.dev/web https://github.com/flutter/flutter_web Dart https://github.c ...

  5. Travis CI in Action

    Travis CI in Action node.js https://docs.travis-ci.com/user/tutorial/ https://docs.travis-ci.com/use ...

  6. stackoverflow & xgqfrms

    stackoverflow & xgqfrms stackoverflow https://stackoverflow.com/users/5934465/xgqfrms https://st ...

  7. vueJS+ES6开发移动端APP实战项目笔记

    一.什么是MVVM框架 MV*包括MVC.MVP.MVVM MVVM框架由Model.View.ViewModel构成. Model指的是数据,在前端对应的是JavaScript对象. View指的是 ...

  8. django中间件介绍

    在学习django中间件之前,先来认识一下django的生命周期,如下图所示: django生命周期:浏览器发送的请求会先经过wsgiref模块处理解析出request(请求数据)给到中间件,然后通过 ...

  9. 07.k近邻算法kNN

    1.将数据分为测试数据和预测数据 2.数据分为data和target,data是矩阵,target是向量 3.将每条data(向量)绘制在坐标系中,就得到了一系列的点 4.根据每条data的targe ...

  10. SpringBoot整合开发

    1.SpringBoot分模块 分模块就是将一个项目分成多个模块,即maven项目. 1)首先创建一个springboot的项目: 第一步:选择springboot的项目 第二步:填写项目的相关信息, ...