hihocoder1138涨姿势的最短路
来源:互联网 发布:什么是淘宝美工 编辑:程序博客网 时间:2024/05/21 04:01
题目的大致意思是说,给定n个点的坐标,让我们求起点到终点的最短距离.
点点之间的距离是min(abs(x1-x2),abs(y1-y2))
一开始根本不会写.直到看到了博主:http://blog.csdn.net/octopusflying/article/details/51125562的代码
思路大体是,从点1到点n的最短路必然经过这个点的前驱和后继.相对的,有x方向的前驱后继,y方向的前驱后继
因此需要按照x,y排序,之后对每个点的对应的前驱后继连边,权重就参照距离算法.
然后最多有4n条边,再用spfa求解.
代码如下
#include<bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3f3fstruct node{ int id; int st,len;};vector<node>v;queue<int>q;int n,m,x;bool cmp(node a,node b){ return a.st<b.st;}bool cmp2(node a,node b){ return a.id<b.id;}int checkst(int need){ int lastst=0,lastlen=0; int temp; int minkongst=inf; for(int i=0; i<v.size(); i++) //先看空挡够不够 { //cout<<v[i].st<<endl; temp = v[i].st-lastst-lastlen;//空挡长度 //cout<<"temp:"<<temp<<endl; if(temp>0) { minkongst = min(minkongst,lastst+lastlen); } if(temp>=need) { return lastst+lastlen; } lastst = v[i].st; lastlen=v[i].len; } //按时间顺序删除 int deleteid = q.front(); q.pop(); vector<node>::iterator iter; for(iter=v.begin(); iter!=v.end(); iter++) //再从第一个开始替换 { if((*iter).id==deleteid) v.erase(iter); } return -1;}int main(){ //freopen("1.txt","r",stdin); node add; cin>>n>>m; add.len=0; add.st=m; add.id=-1; v.push_back(add); for(int i=1; i<=n; i++) { q.push(i); cin>>x; add.len=x; add.id=i; add.st=checkst(x); while(add.st==-1){ add.st=checkst(x); } v.push_back(add); sort(v.begin(),v.end(),cmp);// for(int j=0;j<v.size();j++)// cout<<v[j].st<<"-"<<v[j].id<<" " ;// cout<<endl; } sort(v.begin(),v.end(),cmp2); for(int i=0; i<v.size(); i++) { if(v[i].id==-1)continue; cout<<v[i].id<<" "<<v[i].st<<endl; } return 0;}
0 0
- hihocoder1138涨姿势的最短路
- 【最短路】最短路上的统计
- 【最短路】poj3660 最短路的应用
- 最短路的小结
- 最短路的理解
- 多段图的最短路
- 图的最短路
- K短路新姿势
- 解锁最舒适的startActivity姿势
- 【DayDayUp】【算法_图_最短路_之一_Dijkstra和几种优化姿势】
- POJ 3114 Tarjan + 最短路(三种姿势均能过)
- 【最短路】奇怪的电梯
- 最短路一个的细节
- 最短路算法的整理
- 神奇的最短路-uva658
- 最短路的一些板子
- 迷宫的最短路路径
- 最短路 一个人的旅行
- freemarker常见语法大全
- 视c++为一个联邦
- 以$key=>$value的方式遍历数组
- 百度地图常用API
- 微信小程序-访问豆瓣电影api400错误
- hihocoder1138涨姿势的最短路
- div高度自适应
- 洛谷1996 约瑟夫问题
- Unix网络编程入门学习(1)基础概念理解
- Unsupported method: AndroidProject.getPluginGeneration() while running project
- js插件使用总结
- 使用git建立远程仓库,让别人git clone下来
- 下拉框select2二级联动 js+java
- 根据当前时间,可输入周几为当年第一周的开始,获取当前对应周数