博客
关于我
POJ 2387 Til the Cows Come Home(Dijkstra优先队列)
阅读量:331 次
发布时间:2019-03-04

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

Bessie is out in the field and wants to get back to the barn to get as much sleep as possible before Farmer John wakes her for the morning milking. Bessie needs her beauty sleep, so she wants to get back as quickly as possible.

Farmer John’s field has N (2 <= N <= 1000) landmarks in it, uniquely numbered 1…N. Landmark 1 is the barn; the apple tree grove in which Bessie stands all day is landmark N. Cows travel in the field using T (1 <= T <= 2000) bidirectional cow-trails of various lengths between the landmarks. Bessie is not confident of her navigation ability, so she always stays on a trail from its start to its end once she starts it.
Given the trails between the landmarks, determine the minimum distance Bessie must walk to get back to the barn. It is guaranteed that some such route exists.
Input
Line 1: Two integers: T and N

Lines 2…T+1: Each line describes a trail as three space-separated integers. The first two integers are the landmarks between which the trail travels. The third integer is the length of the trail, range 1…100.

Output
Line 1: A single integer, the minimum distance that Bessie must travel to get from landmark N to landmark 1.
Sample Input
5 5
1 2 20
2 3 30
3 4 20
4 5 20
1 5 100
Sample Output
90
Hint
INPUT DETAILS:
There are five landmarks.
OUTPUT DETAILS:
Bessie can get home by following trails 4, 3, 2, and 1.

优先队列定义q就直接一个结构体就可以了,不要在写vector还是greater或者less了,写上去还麻烦,真的是伤心了。

#include 
#include
#include
#include
using namespace std;const int inf = 0x3f3f3f3f;struct node{ int d; int pos; };priority_queue
q;bool operator < (node a, node b){ return a.d > b.d;//权值小的边优先}int n , m;int e[2005][2005];int dis[2005];void dijkstra(int start){ int book[2005]; memset(book, 0, sizeof(book)); for (int i=1; i<=n; i++) if (i==start) dis[i]=0; else dis[i]=inf; node t; t.d=dis[start]; t.pos=start; q.push(t); while(!q.empty()){ t = q.top(); q.pop(); int x = t.pos; if(book[x]==1) continue; book[x] = 1; for(int j=1; j<=n; j++){ if(book[j]==0 && dis[j]>dis[x]+e[x][j]){ dis[j]=dis[x]+e[x][j]; node tt; tt.d=dis[j]; tt.pos=j; q.push(tt); } } } cout<
<
w){ e[u][v]=w; e[v][u]=w; } } dijkstra(1); } return 0;}

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

你可能感兴趣的文章
MySql 创建函数 Error Code : 1418
查看>>
MySQL 创建新用户及授予权限的完整流程
查看>>
mysql 创建表,不能包含关键字values 以及 表id自增问题
查看>>
mysql 删除日志文件详解
查看>>
mysql 判断表字段是否存在,然后修改
查看>>
MySQL 到底能不能放到 Docker 里跑?
查看>>
mysql 前缀索引 命令_11 | Mysql怎么给字符串字段加索引?
查看>>
mysql 协议的退出命令包及解析
查看>>
mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
查看>>
mysql 四种存储引擎
查看>>
MySQL 基础模块的面试题总结
查看>>
MySQL 备份 Xtrabackup
查看>>
mysql 多个表关联查询查询时间长的问题
查看>>
mySQL 多个表求多个count
查看>>
mysql 多字段删除重复数据,保留最小id数据
查看>>
MySQL 多表联合查询:UNION 和 JOIN 分析
查看>>
MySQL 大数据量快速插入方法和语句优化
查看>>
mysql 如何给SQL添加索引
查看>>
mysql 字段区分大小写
查看>>
mysql 字段合并问题(group_concat)
查看>>