【CodeVS】P1041 car的旅行路线
又到暑假了,住在城市A的Car想和朋友一起去城市B旅游。她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中高速铁路了的单位里程价格为Ti,任意两个不同城市的机场之间均有航线,所有航线单位里程的价格均为t。
那么Car应如何安排到城市B的路线才能尽可能的节省花费呢?她发现这并不是一个简单的问题,于是她来向你请教。
任务
找出一条从城市A到B的旅游路线,出发和到达城市中的机场可以任意选取,要求总的花费最少。
第一行为一个正整数n(0<=n<=10),表示有n组测试数据。
每组的第一行有四个正整数s,t,A,B。
S(0<S<=100)表示城市的个数,t表示飞机单位里程的价格,A,B分别为城市A,B的序号,(1<=A,B<=S)。
接下来有S行,其中第I行均有7个正整数xi1,yi1,xi2,yi2,xi3,yi3,Ti,这当中的(xi1,yi1),(xi2,yi2),(xi3,yi3)分别是第I个城市中任意三个机场的坐标,T I为第I个城市高速铁路单位里程的价格。
共有n行,每行一个数据对应测试数据。
1
3 10 1 3
1 1 1 3 3 1 30
2 5 7 4 5 2 1
8 6 8 8 11 6 3
47.5
如描述
思路分析:求出第四个点,一开始感觉什么高大上呢,其实就是勾股定理,三种情况,稍微注意下存边,再加上最短路就好,做了半天,当在同一城市时火车的价钱打成了机场的,卡了好久MD,加强静态查错能力。。
PS:基本上是看了(http://wenku.baidu.com/link?url=n3hmdiEGTq9j-cBOP7ZUC7t6Ea8FwG6vbrFDTeKhe5hi_x3flKpzelERXByhlQ2gbj7kzJXyZBwSkgAPIxISrkDzIp5bEl0oI9aP5tWbc-a),讲得很好。
Source:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
int n,vf,start,end,s;
int map[][],vn[];
bool used[];
double ans[];
double dist(int x1,int y1,int x2,int y2)
{
return (sqrt(pow((x1-x2),)+pow((y1-y2),)));
}
void dijistra()//dijistra求最短路 。
{
int i,j,now,apt;
double minn,u;
memset(used,,sizeof(used));
memset(ans,,sizeof(ans));
minn=;
used[start*]=true;
used[start*-]=true;
used[start*-]=true;
used[start*-]=true;
while (==)
{
minn=;
for (i=;i<=*n;i++)//枚举被经过的机场,对其余未被经过的机场进行dijstra。
{
if (used[i])
{
now=(i-)/+;
for (j=;j<=*now-;j++)// 若未被经过的机场dis值最小的在当前最短路的机场所在城市"前面",枚举所在城市的前面的机场。
{
if (!used[j])
{
u=ans[i]+dist(map[i][],map[i][],map[j][],map[j][])*vf;
if (u<minn)
{
minn=u;
apt=j;//记录机场位置
}
}
} for (j=*now-;j<=*now;j++)//若未被经过的机场dis值最小的和当前最短路的机场处于同一个城市,换交通方式。
{
if (!used[j])
{
u=ans[i]+dist(map[i][],map[i][],map[j][],map[j][])*vn[now];
if (u<minn)
{
minn=u;
apt=j;
}
}
}
for (j=*now+;j<=*n;j++)//同第一种情况。
{
if (!used[j])
{
u=ans[i]+dist(map[i][],map[i][],map[j][],map[j][])*vf;
if (u<minn)
{
minn=u;
apt=j;
}
}
} }
}
if ((apt==*end-) || (apt==*end-) || (apt==*end-) || (apt==*end))
{
printf("%.1lf\n",minn);
return;
}
else
{
used[apt]=true; ans[apt]=minn;
}
// }
}
}
void rf()//读入+根据平面内三点,求出第四个点的坐标。
{
int i;
int x,x1,x2,x3,y1,y2,y3,y;
scanf("%d%d%d%d",&n,&vf,&start,&end);
if (start==end)
{
printf("%.1lf",0.0);
return;
}
else
for (i=;i<=n;i++)
{
scanf("%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3,&vn[i]);
x=x1+x2-x3; y=y1+y2-y3;
if (dist(x1,y1,x2,y2)!=dist(x3,y3,x,y))
{
x=x1+x3-x2;
y=y1+y3-y2;
if (dist(x1,y1,x3,y3)!=dist(x2,y2,x,y))
{
x=x2+x3-x1;
y=y2+y3-y1;
}
}
map[i*-][]=x1; map[i*-][]=y1;
map[i*-][]=x2; map[i*-][]=y2;
map[i*-][]=x3; map[i*-][]=y3;
map[i*][]=x; map[i*][]=y;
}
dijistra();
} int main()
{
int i;
scanf("%d",&s);
for (i=;i<=s;i++)
{
memset(map,,sizeof(map));
//memset(ans,0,sizeof(ans));
rf();
}
return ;
}
【CodeVS】P1041 car的旅行路线的更多相关文章
- NOIP2001 Car的旅行路线
题四 Car的旅行路线(30分) 问题描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速 ...
- [NOIP2001提高组]CODEVS1014 Car的旅行路线(最短路)
最短路,这个不难想,但是要为它加边就有点麻烦..还好写完就过了(虽然WA了一次,因为我调试用的输出没删了..),不然实在是觉得挺难调的.. ------------------------------ ...
- GDOI2015小Z的旅行路线
GDOI2015小Z的旅行路线 题意: \(n\)个点的无根树,边上有权值. \(q\)个询问\(s\)和\(s\),问从\(s\)出发,找一条最长路(不经过重复点),保证路径上所有边边权不超过\(x ...
- 【Foreign】旅行路线 [倍增]
旅行路线 Time Limit: 20 Sec Memory Limit: 256 MB Description Input Output 仅一行一个整数表示答案. Sample Input 3 2 ...
- 洛谷P1027 Car的旅行路线
洛谷P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速 ...
- 洛谷 P1027 Car的旅行路线
P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路 ...
- AC日记——Car的旅行路线 洛谷 P1027
Car的旅行路线 思路: 这题不难,就是有点恶心: 而且,请认真读题目(就是题目卡死劳资): 来,上代码: #include <cmath> #include <cstdio> ...
- codevs 1450 xth 的旅行
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 毕业了,Xth很高兴,因为他要和他的 ra ...
- P1027 car的旅行路线
car的旅行路线 洛谷链接 这个题关键就是 如何把每个点表示出来,其实求出四个点的坐标后,只需要把这些点连接起来,用一遍folyed求出最短路径就好了. 代码: #include<cmath&g ...
随机推荐
- Delphi中record和packed record的区别
转载:http://blog.csdn.net/rznice/article/details/6566978 第一种不带packed关键字的结构体表明编译器编译时要求进行字对齐. 而第二种带packe ...
- 关于strcpy_s
#include"stdafx.h" #include<iostream> #include<cstring> int main() { using nam ...
- hibernate查询语句实例代码
一.聚集函数的使用: avg(...), sum(...), min(...), max(...) count(*) count(...), count(distinct ...), count(al ...
- 解决css样式被内置样式覆盖的问题
.preImg { height:400px !important } <img id="preImg" class="preImg" style=&qu ...
- linux环境下libevent的使用
step1:安装libevent yum install libevent step2: 代码入下: #include <sys/socket.h> #include <sys/ty ...
- 使用PHP获取时间今天 明天 昨天 时间戳的详解
使用php获取时间今天明天昨天时间戳 2013-06-20 11:12 <?php echo "今天:".date("Y-m-d")."< ...
- orientation和gravity的区别
orientation:决定UI组件是按行还是列显示 gravity:指定文字对齐方式.
- LeetCode——Reverse Integer(逆置一个整数)
问题: Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return –321 Ha ...
- 汇编学习(六)——代码转换程序
(一)逻辑运算指令 一.双操作数逻辑运算指令 1.指令格式: AND dst,src ; "与"运算, OR dst,src ; "或"运算 XOR dst,s ...
- 软考之PV操作(同步)
这几天,陆续有那么三两个同学跟我讨论了一下关于软考上的PV操作的题,吾虽不才,但还是把同学们讲通了,在此,特分享一下自己的思路和想法,愿对大家有点帮助! 下面,我们就通过自己做过的试卷上两道题来分析: ...