题目描述 Description

小松所在的PK大学校园又称作燕园,是一个十分美丽的校园。有博雅塔,未名湖,亚洲最大的高校图书馆,人称“一塔湖图”。但是由于燕园的历史比较悠久,所以很多的老房子都要不断地维修(就像故宫现在在维修一样),这导致了燕园中的一些路是禁止通行的。
十分有趣的是,整个燕园的形状是南北朝向的一个四边形,而燕园的建筑格局也十分有规则。你可以假设他被n条横向的路和m条纵向的路分割成了大大小小的很多块区域。禁止通行的那些路正好在两个相邻的交叉路口之间。小松十分想知道,他要从他宿舍所在的A路口到达图书馆所在的B路口需要多少时间(他只能沿着能够通行的道路行走,并假设小松走1单位长度需要1单位的时间)?你能帮助他吗?(不要误会小松如此勤奋要去图书馆看书,小松去图书馆的主要原因是那里是全校PPMM最多的地方)。
另外要说的是,燕园中还有很多的地方是湖。所以湖所占的区域也是不能通行的。

输入描述 Input Description

输入文件的第一行包含4个整数n(1≤n≤10),m(1≤m≤10),t(1≤t≤100),k(1≤k≤10)。分别表示燕园中有n条纵向的路和m条横向的路,t条不能通行的路,还有k个湖。接下来的一行有n个整数a1..an。ai(0≤ai≤100)表示从西往东第i条纵向向路离燕园最西端的距离;再接下来的一行有m个整数b1..bm。bi(0≤bi≤100)表示从南往北第i条横向路离燕园最南端的距离;再接下来k行,每行四个整数x1,x2,y1,y2表示由西向东的第x1条路到第x2条路和由南向北的第y1条路到第y2条路之间是一个湖。要注意的是湖的边缘是可以行走的,湖也可能有重叠,如果两个湖接壤的话,接壤的部分也是可以行走的;再接下来t行,每行4个整数x1,y1,x2,y2,表示路口(x1,y1)和(x2,y2)之间的路是静止通行的,你可以认定该两个路口一定是相邻的;最后一行包含4个整数x1,y1,x2,y2,表示小松所在的路口A(x1,y1)和图书馆所在的路口B(x2,y2)。

注:路口(x,y)表示由西向东的第x条纵向路和由南向北的第y条横向路的交叉口。

输出描述 Output Description

输出包括一个整数,表示小松最少需要花费的时间。保证不会出现无解的情况。

样例输入 Sample Input

4 4 2 1

0 1 3 4

0 1 3 4

2 4 2 4

2 2 3 2

2 4 3 4

1 3 4 4

样例输出 Sample Output

11

思路

好像最后一个数据有毒
我还不是很会!!

代码

#include<cstdio>
#include<iostream>
#include<cstring>
#define M 15
#define INF 9999999
using namespace std;
int map[M*M][M*M],x[M],y[M],cnt,n,m,t,k;
void build()
{memset(map,0x3f3f3f3f,sizeof(map));for (int i=1;i<=cnt;i++)map[i][i]=0;for (int i=1;i<=n;i++)//以map[i][j]为中心建图 for (int j=1;j<=m;j++){if (i>1) map[(j-1)*n+i][(j-1)*n+i-1]=x[i]-x[i-1];//向左 if (j>1) map[(j-1)*n+i][(j-1-1)*n+i]=y[j]-y[j-1];//向上 if (i<n) map[(j-1)*n+i][(j-1)*n+i+1]=x[i+1]-x[i];//向右 if (j<m) map[(j-1)*n+i][(j-1+1)*n+i]=y[j+1]-y[j];//向下 }for (int i=1;i<=t;i++)//处理不能走的路 {int x1,y1,x2,y2;scanf("%d%d%d%d",&x1,&y1,&x2,&y2);map[(y1-1)*n+x1][(y2-1)*n+x2]=INF;map[(y2-1)*n+x2][(y1-1)*n+x1]=INF;}for (int l=1;l<=k;l++)//处理胡,注意边界可以走{int x1,y1,x2,y2;scanf("%d%d%d%d",&x1,&x2,&y1,&y2);for (int i=x1;i<=x2-1;i++)//处理x方向的 只向右延伸 for (int j=y1+1;j<=y2-1;j++){map[(j-1)*n+i][(j-1)*n+i+1]=INF;map[(j-1)*n+i+1][(j-1)*n+i]=INF;}for (int j=y1;j<=y2-1;j++)//处理y方向的 只向下延伸for (int i=x1+1;i<=x2-1;i++){map[(j-1)*n+i][j*n+i]=INF;map[j*n+i][(j-1)*n+i]=INF;} }
}
void floyed()
{for (int k=1;k<=cnt;k++)for (int i=1;i<=cnt;i++)for (int j=1;j<=cnt;j++)if (i!=j&&i!=k&&j!=k)map[i][j]=min(map[i][k]+map[k][j],map[i][j]);
}
int main()
{scanf("%d%d%d%d",&n,&m,&t,&k);cnt=n*m;for (int i=1;i<=n;i++)scanf("%d",&x[i]);for (int i=1;i<=m;i++)scanf("%d",&y[i]);build();floyed();int x1,y1,x2,y2;scanf("%d%d%d%d",&x1,&y1,&x2,&y2);printf("%d",map[(y1-1)*n+x1][(y2-1)*n+x2]);
}

codevs 1024 一塔湖图 floyd 解题报告相关推荐

  1. CODE[VS]1024 一塔湖图

    题目:http://codevs.cn/problem/1024/ 思路:根据数据建立燕园路口连接矩阵,然后用floyd算法求解最有路径.题目,数据5有误,t与k数据颠倒即可得到答案92. 题解: / ...

  2. 久久未至的Codevs1024一塔湖图解题报告

    一直想给这个题写个解题报告但是给忘了OTZ难产了这么久终于出来了 这个题当时坑了我一个星期整,所以一定要写一个解题报告纪念一下 1024 一塔湖图 时间限制: 1 s 空间限制: 128000 KB ...

  3. 一塔湖图(codevs 1024)

    题目描述 Description 小松所在的PK大学校园又称作燕园,是一个十分美丽的校园.有博雅塔,未名湖,亚洲最大的高校图书馆,人称"一塔湖图".但是由于燕园的历史比较悠久,所以 ...

  4. [Codevs] 一塔湖图

    http://codevs.cn/problem/1024/ floyd 走起 #include <iostream> #include <cstdio> #include & ...

  5. codevs1024一塔湖图(丧心病狂的建图)

    /* 丧心病狂的最短路 关键是建图 根据题目中给的路 拆出节点来 建图 (i,j) -->(j-1)*n+i 然后根据障碍 把死路 湖覆盖的dis改变成极大值 然后Floyd 然后 然后就没有然 ...

  6. 习题:codevs 2822 爱在心中 解题报告

    这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...

  7. NOIP2012普及组 (四年后的)解题报告 -SilverN

    本章施工仍未完成 现在的时间是3.17 0:28,我困得要死 本来今天(昨天?)晚上的计划是把整个四道题的题解写出来,但是到现在还没写完T4的高效算法,简直悲伤. 尝试了用floyd写T4,终于大功告 ...

  8. 10.30 NFLS-NOIP模拟赛 解题报告

    总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没 ...

  9. 解题报告 (十四) 数位DP

    文章目录 数位DP 解题报告 HDU 4722 Good Numbers HDU 2089 不要62 HDU 3555 Bomb HDU 3652 B-number PKU 3252 Round Nu ...

  10. 2015 CQU 重庆大学程序设计竞赛 解题报告

    前言 儿童节快乐~~ 啊对了首先想带标程回家看的可以来这里:教主大大标程包 /我的现场赛代码 在校赛这样三人组队两台电脑的环境下,单挑的压力着实是十分之大--毕竟在同等条件下别人手速只要超过自己的一半 ...

最新文章

  1. CentOS 6.5安装python3.3.4
  2. Linux管道编程实例
  3. linux cached 进程,关于Linux cached内存简析
  4. Discuz!6.1.0 用户密码如何加密的?
  5. 推荐一个markdown格式转html格式的开源JavaScript库
  6. 互联网金融行业申请评分卡(A卡)简介
  7. python高阶函数教学_Python 简明教程 --- 16,Python 高阶函数
  8. python中浮点数类型_Python基本数据类型之浮点型
  9. Dubbo服务端暴露全流程
  10. 段错误之 memset 对类对象的误用
  11. matlab中svm testacc参数,使用Matlab进行交叉验证的多类SVM的完整示例
  12. go语言中顺序查找的案例--人名查找
  13. JavaScript表单验证年龄
  14. 好用的开源内网穿透工具NPS
  15. 计算机类专业学习难度排行,大学最难学的十大专业排名
  16. 需求分析(团队作业3)
  17. DataSec数据防泄密系统
  18. 动态组件_插槽_自定义指令
  19. 证件照在线生成源代码
  20. java查询日期类的表,JAVA菜鸟入门篇 - 时间处理相关类实例:打印该月日期表 (29)...

热门文章

  1. Spring的IOC和AOP,学不会Spring的,你看我的文章
  2. Java面试题-day25 数据库之事务
  3. Java烤地瓜简单小案例
  4. 什么是socket通信
  5. 数据流中的第 K 大元素
  6. 2019.5.29 中移物联网前端实习生笔试
  7. AppWeb认证绕过漏洞(CVE-2018-8715)
  8. #Paper Reading# Pre-trained Language Model based Ranking in Baidu Search
  9. Linux 运维工程师职业技能要求
  10. 突破人生的瓶颈(心灵之灯)