这里首先奉上代码。最近有点忙。下次再发题解。

#include<stdio.h>
#include<iostream>
#include<queue>
#include<vector>
#include<stdlib.h>
#include<algorithm>
#include<math.h>
#include<memory.h>
using namespace std;
const int root = 1;
const int INF = 1<<30;
const int MAX_T = 1000002;
const int MAX_N = 302;
const int MAX_D = 4;
int dx[]={0,0,-1,1};
int dy[]={-1,1,0,0};
//init
inline int absdist(int value)
{return value>0?value:-value;
}
struct rnode
{int x;int y;int ID;
};
struct rnode R[MAX_N]; //input_gnode
int discretx[MAX_N]; //discret
int discrety[MAX_N]; //discret
int rememx[MAX_N];  //init_x
int rememy[MAX_N];  //init_y
int lengthx; //discret_x_length
int lengthy; //discret_y_length
int findx[MAX_T]; //x->discret_x
int findy[MAX_T]; //y->discret_y
int numx[MAX_T];
int numy[MAX_T];
//
struct gnode
{int x,y;
}; //info
queue <struct gnode> Q;
bool used[MAX_N][MAX_N];
int dist[MAX_N][MAX_N];
struct gnode head,next;
struct tnode
{int homex;int homey;int value;
};
struct tnode G[MAX_N][MAX_N];
//
int ans = 0;
int N;
int Y,C; //Y*C
int Sx,Sy;
int Tx,Ty;
int times ;
bool flag = true ; //ans
void init_rem()
{int i;for (i=1;i<=N;i++)if (numx[R[i].x]>1||numx[R[i].x-1]>=1||numx[R[i].x+1]>=1)rememx[i+N*0]=R[i].x,rememx[i+N*1]=R[i].x-1,rememx[i+N*2]=R[i].x+1;else rememx[i+N*0]=R[i].x;for (i=1;i<=N;i++)if (numy[R[i].y]>1||numy[R[i].y-1]>=1||numy[R[i].y+1]>=1)rememy[i+N*0]=R[i].y,rememy[i+N*1]=R[i].y-1,rememy[i+N*2]=R[i].y+1;else rememy[i+N*0]=R[i].y;sort(rememx+1,rememx+N*3+1);sort(rememy+1,rememy+N*3+1);
}
void note_rem()
{int i;lengthx = 0;discretx[lengthx] = -1;for (i=1;i<=N*3;i++)if (rememx[i]!=discretx[lengthx]) discretx[++lengthx]=rememx[i];lengthy = 0;discrety[lengthy] = -1;for (i=1;i<=N*3;i++)if (rememy[i]!=discrety[lengthy]) discrety[++lengthy]=rememy[i];Y=lengthx;C=lengthy;
}
void build_finding()
{int i;for (i=1;i<=Y;i++)findx[discretx[i]]=i;for (i=1;i<=C;i++)findy[discrety[i]]=i;
}
void init_G()
{int i,j;for (i=1;i<=Y;i++)for (j=1;j<=C;j++)G[i][j].homex = discretx[i] , G[i][j].homey = discrety[j] , G[i][j].value = 0;for (i=1;i<=N;i++)G[findx[R[i].x]][findy[R[i].y]].value = R[i].ID;G[findx[R[root].x]][findy[R[root].y]].value= N+1;
}
void discret()
{init_rem();note_rem();build_finding();init_G();
}
void init()
{int i;scanf("%d",&N);for (i=1;i<=N;i++)scanf("%d %d",&R[i].x,&R[i].y),R[i].ID=i,numx[R[i].x]++,numy[R[i].y]++;discret();
}
bool in_G(int x,int y)
{if (x<1) return false;if (y<1) return false;if (x>Y) return false;if (y>C) return false;return true;
}
int distc(int x1,int y1,int x2,int y2)
{return (absdist(G[x1][y1].homex-G[x2][y2].homex)+absdist(G[x1][y1].homey-G[x2][y2].homey));
}
void init_SPFA()
{Sx=findx[R[times-1].x];Sy=findy[R[times-1].y];Tx=findx[R[times<=N?times:1].x];Ty=findy[R[times<=N?times:1].y];memset(dist,1,sizeof(dist));memset(used,false,sizeof(used));head.x = Sx;head.y = Sy;used[Sx][Sy]=true;dist[Sx][Sy] = 0;Q.push(head);
}
//mainwork
void SPFA()
{if (!flag) return ;bool route = false;while (!Q.empty()){head = Q.front();Q.pop();if (head.x==Tx&&head.y==Ty) {route = true ; continue ;}int i;for (i=0;i<MAX_D;i++){next.x=head.x+dx[i];next.y=head.y+dy[i];if (!in_G(next.x,next.y)) continue;if (G[next.x][next.y].value&&G[next.x][next.y].value!=times) continue;if (used[next.x][next.y]) continue;dist[next.x][next.y]=dist[head.x][head.y]+distc(next.x,next.y,head.x,head.y);used[next.x][next.y]=true;Q.push(next);}}if (!route)ans=INF,flag = false;else ans+=dist[Tx][Ty];
}
//
void work()
{for (times = 2;times<= N+1;times++){init_SPFA();SPFA();}
}
void put()
{if (ans==INF) ans=-1;printf("%d",ans);
}
int main()
{freopen("delivery.in","r",stdin);freopen("delivery.out","w",stdout);init();work();put();return 0;
}

delivery route配送路线相关推荐

  1. Matlab【路径规划】—— 无人机药品配送路线最优化

    文章目录 问题描述 具体思路 demo1:求解所有节点间的距离 demo2:直升机配送路线规划算法 demo3:寻找最优解的优化算法 支撑材料&工程附件 问题描述 某市引进一架专业大型无人机用 ...

  2. 粒子群算法求解物流配送路线问题(python)

    粒子群算法求解物流配送路线问题(python) 1.查找论文文献 找一篇物流配送路径优化+粒子群算法求解的论文 参考文献:基于混沌粒子群算法的物流配送路径优化 2.了解粒子群算法的原理 讲解通俗易懂, ...

  3. 2019ICPC(银川) - Delivery Route(强连通缩点+分块最短路)

    题目链接:点击查看 题目大意:给出n个点和m条边构成的图,每条边都有权值,其中m1条边是双向的,且权值非负,有m2条边是单向的,且权值可负,现在要求从给定起点st到其他每个点的最短路,若不存在路径则输 ...

  4. 2019 ICPC Asia Yinchuan Regional H - Delivery Route 强连通+最短路+拓扑

    原题链接:https://nanti.jisuanke.com/t/42388 目录 题意 分析 Code 题意 有n个点,x条双向边且边权为正,y条单向边边权可以为负,问从某个点出发到全部点的最短距 ...

  5. javascript验证_使用JavaScript验证信用卡

    javascript验证 We all know that JavaScript shouldn't be a web form's only method of validation but cli ...

  6. 乐外卖物流配送调度系统设计

    摘要 随着互联网时代的发展,以及人们对生活品质的追求,订外卖已经成为了一种普遍的消费行为,外卖因其快捷便利性广受青睐,也因配送不及时,不准确倍受指摘.为了改善当前外卖配送过程中存在的配送速度不能保证, ...

  7. dijikstra 旅行商问题_第27期:基于旅行商问题(TSP)的配送网络优化—R实现

    回国后,没有时间休息,一是工作不能耽误,二是很多杂乱的事情要处理,因此,公众号很久没有更新,实在抱歉! 本期的推文是关于旅行商问题(TSP)的配送网络优化,也是因为最近在指导学生参加省大学生现代物流设 ...

  8. 物流matlab,物流配送线路优化Matlab算法研究

    [摘 要]"最后一公里"的配送问题属于物流配送车辆路径优化问题.针对物流配送线路选取过程中所缺乏的可嵌入系统的简易优化算法的缺陷,提出了基于逐点调整法.双点交换法的综合算法.该方法 ...

  9. 基于C语言Win32API窗口实现的物流配送信息管理系统

    一.题目 物流配送管理信息系统 二.系统功能模块结构图 2.1 函数程序模块结构图如图 1 所示: 图 1 2.2 录入子菜单功能结构图如图 2 所示: 图 2 2.3 插入的子菜单的功能结构图如图 ...

最新文章

  1. 2022-2028年中国自动化设备市场研究及前瞻分析报告
  2. linux apt-get proxy
  3. jQuery基础修炼圣典—DOM篇(二)jQuery遍历
  4. mysql 记录所有操作_mysql 的一些记录的操作
  5. 数据湖之iceberg系列(五)-Spark实时处理数据
  6. SpringMVC架构---SpringMVC学习笔记(一)
  7. 一个Demo学会用Android兼容包新控件
  8. fcpx教程从入门到精通「4」检查器窗口的认识
  9. web安全设置(含IIS,php,ASP.NET)与目录权限设置
  10. Code For Better 谷歌开发者之声——Flutter - Google 开源的移动 UI 框架
  11. 国际市场营销知识框架图_留学热门 | 伦敦里士满大学市场营销本科专业
  12. 春款童装产品做短视频营销应该怎么做?短视频营销策略分析
  13. IT男潘加宇:老婆在孩子班级群里怒怼数学老师
  14. 《数字逻辑设计与计算机组成》一 第3章 3.1 简介
  15. html网页收藏夹小图标,在网页标题栏上和收藏夹显示网站logo的实现方法
  16. 群晖DSM PT软件安装记录一:安装transmission
  17. 2022/08/15 吉软 MySQL数据库(1)
  18. 负担过重何以轻装前行
  19. 关于NTKO将代码插入到光标处
  20. 国家2000坐标系CGCS2000(EPSG4490和EPSG4479)参数

热门文章

  1. python与金融投资_金融量化投资与Python
  2. 最好的PDF压缩:ImageGear PDF 26.0.NET
  3. GBase 8c安装部署(一):修改配置文件部署方式
  4. CLion+OpenCV 识别身份证号码---检测身份证号码
  5. [K8s Security] 基于Kube-Bench(CIS Benchmark)的自动化安全基线扫描
  6. thunder 更改迅雷默认播放器
  7. Python笔记:复杂的布尔表达式和正反面写法示例
  8. 整数除以整数如何输出小数
  9. 用matlab绘制不同角度下的透射反射强度图
  10. 学习笔记——面向对象第三天