题意,求1到n的最短路。不难想到单源最短路,难点在于数量级太大,因此如何建图是关键;

因为cost =  min{|Xi-Xj|, |Yi-Yj|};所以,点i的移动只有两种情况,. x距离最近的点,. y距离最近的点 

如此一来,每个点i的最多只有四条边(为什么是四条?),这样复杂度就降下来了,单源最短路的复杂度为n*m(点*边数) 

我用spfa。 

解题思路: 

x轴排序,建图 

y轴排序,建图 

求最短路 

用spfa注意队列que的大小至少是n*m,可以使用循环队列 

#include <cstdio>
#include <cstring>
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std; const int N = ; struct node
{
int v;
int i;
bool operator < (const node &t)const
{
return v < t.v;
}
}x[N],y[N]; vector<int>g[N];
int p[N][]; int ABS(int x)
{
return x >= ? x : -x;
} long long get_value(int i,int j)
{
return min(ABS(p[i][]-p[j][]),ABS(p[i][]-p[j][]));
} bool flag[N];
long long dist[N];
int que[N]; long long spfa(int s,int n)
{ memset(flag,false,sizeof(flag));
memset(dist,0x7f,sizeof(dist));
int head = ,tail = ;
dist[s] = ;
flag[s] = true;
que[tail++] = s;
while(head != tail)
{
int tep = que[head++];
if(head >= N) head = ;//循环队列 flag[tep] = false;
for(int i = ; i < g[tep].size(); i++)
{
int v = g[tep][i];
if(dist[v] > dist[tep] + get_value(v,tep))
{
dist[v] = dist[tep] + get_value(v,tep);
if(!flag[v])
{
que[tail++] = v;
if(tail >= N) tail = ;//循环队列 flag[v] = true;
}
}
}
}
return dist[n-]; } int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i = ; i < N; i++) g[i].clear();
for(int i = ; i < n; i++)
{ scanf("%d %d",&p[i][],&p[i][]);
x[i].v = p[i][]; x[i].i = i;
y[i].v = p[i][]; y[i].i = i;
}
sort(x,x+n);
sort(y,y+n);
for(int i = ; i < n; i++)
{
int u = x[i-].i;
int v = x[i].i;
//这里可以去下重
g[u].push_back(v);
g[v].push_back(u);
}
for(int i = ; i < n; i++)
{
int u = y[i-].i;
int v = y[i].i;
//这里可以去下重
g[u].push_back(v);
g[v].push_back(u);
}
printf("%lld\n",spfa(,n));
}
return ;
}

最新文章

  1. IDEA+Tomcat+JRebel热部署
  2. Linux基本操作命令
  3. Java-异常处理练习
  4. 不停止MySQL服务的情况下修改root的密码
  5. html2canvas根据DOM元素样式实现网页截图
  6. C++Builder Berlin 编译
  7. ajax获取的全部是object,我要获取的是json
  8. 在VM已安装Android4.4 连接小米手环 网络设置
  9. IIS7 配置 PHP5.5
  10. 第二部分 职责型模式responsibility
  11. angular实现select的ng-options4
  12. OpenCV 之 神经网络 (一)
  13. redis 基本原理及安装
  14. windows系统上搭建redis集群哨兵及主从复制
  15. C++内存管理(转)
  16. spark本地环境的搭建到运行第一个spark程序
  17. gulp 常用插件汇总
  18. iddler抓包过程以及fiddler抓包手机添加代理后连不上网解决办法
  19. 安装Windows 64 位 mysql 最新版本解压包中没有data目录和my-default.ini及服务无法启动的快速解决办法
  20. C# 字节数组和十六进制字符串之间转换的另类写法

热门文章

  1. 剑指offer 面试9题
  2. selenium之坑:点击后页面刷新重新获取刷新前的页面(StaleElementReferenceException:Message:Element not found in the cache...)
  3. Git配置出现的问题
  4. Mybatis一对多/多对多查询时只查出了一条数据
  5. Linux Shell基础 Bash常见命令 history、alias命令以及常用快捷键
  6. 常用模块----time&amp;random&amp;hushlib&amp;os
  7. VCS 常用命令速查
  8. 简要总结ajax工作原理及优缺点
  9. gzip: stdin: unexpected end of file tar: Unexpected EOF in archive
  10. URL重写技术总结