一塔湖图(codevs 1024)
小松所在的PK大学校园又称作燕园,是一个十分美丽的校园。有博雅塔,未名湖,亚洲最大的高校图书馆,人称“一塔湖图”。但是由于燕园的历史比较悠久,所以很多的老房子都要不断地维修(就像故宫现在在维修一样),这导致了燕园中的一些路是禁止通行的。
十分有趣的是,整个燕园的形状是南北朝向的一个四边形,而燕园的建筑格局也十分有规则。你可以假设他被n条横向的路和m条纵向的路分割成了大大小小的很多块区域。禁止通行的那些路正好在两个相邻的交叉路口之间。小松十分想知道,他要从他宿舍所在的A路口到达图书馆所在的B路口需要多少时间(他只能沿着能够通行的道路行走,并假设小松走1单位长度需要1单位的时间)?你能帮助他吗?(不要误会小松如此勤奋要去图书馆看书,小松去图书馆的主要原因是那里是全校PPMM最多的地方)。
另外要说的是,燕园中还有很多的地方是湖。所以湖所占的区域也是不能通行的。
输入文件的第一行包含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条横向路的交叉口。
输出包括一个整数,表示小松最少需要花费的时间。保证不会出现无解的情况。
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
11(样例有误,应为5)
#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=;i<=cnt;i++)
map[i][i]=;
for(int i=;i<=n;i++)//以map[i][j]为中心建图
for(int j=;j<=m;j++)
{
if(i>)map[(j-)*n+i][(j-)*n+i-]=x[i]-x[i-];//向左
if(j>)map[(j-)*n+i][(j--)*n+i]=y[j]-y[j-];//向上
if(i<n)map[(j-)*n+i][(j-)*n+i+]=x[i+]-x[i];//向右
if(j<m)map[(j-)*n+i][(j-+)*n+i]=y[j+]-y[j];//向下
}
for(int i=;i<=t;i++)//处理不能走的路
{
int x1,y1,x2,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
map[(y1-)*n+x1][(y2-)*n+x2]=INF;
map[(y2-)*n+x2][(y1-)*n+x1]=INF;
}
for(int l=;l<=k;l++)//处理胡,注意边界可以走
{
int x1,y1,x2,y2;
scanf("%d%d%d%d",&x1,&x2,&y1,&y2);
for(int i=x1;i<=x2-;i++)//处理x方向的 只向右延伸
for(int j=y1+;j<=y2-;j++)
{
map[(j-)*n+i][(j-)*n+i+]=INF;
map[(j-)*n+i+][(j-)*n+i]=INF;
}
for(int j=y1;j<=y2-;j++)//处理y方向的 只向下延伸
for(int i=x1+;i<=x2-;i++)
{
map[(j-)*n+i][j*n+i]=INF;
map[j*n+i][(j-)*n+i]=INF;
}
}
}
void floyed()
{
for(int k=;k<=cnt;k++)
for(int i=;i<=cnt;i++)
for(int j=;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=;i<=n;i++)
scanf("%d",&x[i]);
for(int i=;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-)*n+x1][(y2-)*n+x2]);
}
一塔湖图(codevs 1024)的更多相关文章
- [Codevs] 一塔湖图
http://codevs.cn/problem/1024/ floyd 走起 #include <iostream> #include <cstdio> #include & ...
- codevs1024一塔湖图(丧心病狂的建图)
/* 丧心病狂的最短路 关键是建图 根据题目中给的路 拆出节点来 建图 (i,j) -->(j-1)*n+i 然后根据障碍 把死路 湖覆盖的dis改变成极大值 然后Floyd 然后 然后就没有然 ...
- C++基础知识-Day5
今天主要讲的是类的扩展 1.类成员函数的存储方式 首先我们介绍类成员函数的存储方式,C++引入面向对象的概念之后,C语言中的一些比如static/const等原有语义,作一些升级,此时既要保持兼容,还 ...
- 2017“编程之美”终章:AI之战勇者为王
编者按:8月15日,第六届微软“编程之美”挑战赛在选手的火热比拼中圆满落下帷幕.“编程之美”挑战赛是由微软主办,面向高校学生开展的大型编程比赛.自2012年起,微软每年都在革新比赛命题.紧跟时代潮流, ...
- 网络流 HDU 3605
建图 源点 -> 1024类人 -> 星球 -> 汇点 权 每类人数目 星球容量 星球容量 列举 0~1 ...
- 自制单片机之五……LCD12864的驱动
LCD12864的驱动LCD12864在市面上主要分为两种,一种是采用st7920控制器的,它一般带有中文字库字模,价格略高一点.另一种是采用KS0108控制器,它只是点阵模式,不带字库.很可惜,我的 ...
- BZOJ1000-1099板刷计划+一句话题解 73/100
1000-1009 1000A+B Problem 这个还要写??? 1001 狼抓兔子 平面图最小割转化为对偶图最短路 #include<bits/stdc++.h> #define i ...
- [C++]四分树(Quadtrees)
[本博文非博主原创,思路与题目均摘自 刘汝佳<算法竞赛与入门经典(第2版)>] 四分树Quadtrees 一幅图有1024个点, 可以对图平均分成4块, 并且子图也可以再往下分, 直到一个 ...
- 一幅画<十六芒星盾>---程序员or艺术家
画上是一面含有16个尖角的铜盾,这是我用程序算法生成的图像中最震撼的一幅.图像生成出来后,我看了好久,一边看一边想我的人生转向问题:我是不是该离开苦逼又屌丝的程序界,混入高端大气上档次的艺术圈? 说要 ...
随机推荐
- mysql存储过程的学习
平时在工作中写过很多存储过程,但有时候对某些存储过程还是有些困惑的,所以发一篇文章记录下. 标准存储过程写法 create procedure`myQueryTask`( IN Task_No VAR ...
- UVA12563Jin Ge Jin Qu hao(01背包)
紫书P274 题意:输入N首歌曲和最后剩余的时间t,问在保证能唱的歌曲数目最多的情况下,时间最长:最后必唱<劲歌金曲> 所以就在最后一秒唱劲歌金曲就ok了,背包容量是t-1,来装前面的歌曲 ...
- 架构(Architecture)和框架(Framework)杂谈
1. 架构和框架的设计层次不同 类似于硬件设计,软件设计也分为不同的层次.典型的软件设计层次如下图: 在这个图中我们可以看到,Framework处于Micro-archite ...
- MyEclipse------快速读取特定目录下的文件的内容(字节输入流)
other.jsp <%@ page language="java" import="java.util.*" pageEncoding="UT ...
- arp绑定网关MAC地址错误
为了防止局域网的arp 要绑定网关MAC地址 在vista/win中 用 arp -s 绑定网关会出现错误 ARP 项添加失败 C:\Users\sink>arp -a 接口: 10.200.5 ...
- JavaScript常见调试方法
编辑导语:javascript调试方法,常见使用alert和console来定位出错和输出的结果是否是想要的,在chrome中,还可以使用断点来看运行的情况等,本文介绍了比较全面的调试方法,你知道co ...
- 利用dedecms autoindex让文章列表加上序列号
有些时候我们在制作模板的需要在文章标题前面加上序列号,可以通过织梦自带的autoindex属性来实现,实现方法很简单,只需要在序号递增的地方加上 这段代码就行,[field:global runphp ...
- 转:Java NIO系列教程(八) DatagramChannel
Java NIO中的DatagramChannel是一个能收发UDP包的通道.因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入.它发送和接收的是数据包. 打开 DatagramChann ...
- Linux中如何查看文件的最初创建时间
查看 一个文件的 最初创建时间: Linux中如何查看文件的最初创建时间 linux 目前Linux没有直接查看创建文件的命令,你只能通过文件是否被修改过来进行判断. //查看代码stat ...
- NGUI的部分控件无法更改layer?
http://momowing.diandian.com/post/2012-09-17/40038835795 今天狗日的遇到这样的问题,这是一个imagebutton:,它的层定义为:,NGUI里 ...