POJ1178枚举三个地方(所有点都去同一个点)
题意:
有一个国王和很多骑士,他们都要到某一个点去集合,然后问所有人都到达某个终点的距离和最小是多少?过程中如果国王遇到了一个骑士的话,国王就可以和骑士一起按照骑士的走法走,这是两个人算一个人,同时国王有八种走法,骑士也有八种走法,两个不一样。
思路:
可以枚举终点,和骑士相交的点还有和那个骑士相交,只要确定这三个点后距离就出来了,求距离可以用广搜预处理,也可以用最短路预处理,不管用什么记得细心点,还有对于国王的最短路直接可以算出来,就是max(abs(x1-x2),abs(y1-y2))。
#include<queue>
#include<stdio.h>
#include<string.h>
#define N 70
#define INF 1000000000
using namespace std;
typedef struct
{
int x ,y ,t;
}NODE;
NODE xin ,tou;
NODE node[N];
int dis[N][N];
int mark[N];
int dir[8][2] = {1 ,2 ,1 ,-2 ,-1 ,2 ,-1 ,-2 ,2 ,1 ,2 ,-1 ,-2 ,1 ,-2 ,-1};
int minn(int x ,int y)
{
return x < y ? x : y;
}
int maxx(int x ,int y)
{
return x > y ? x : y;
}
int abss(int x)
{
return x > 0 ? x : -x;
}
bool ok(int x ,int y)
{
return x >= 1 && x <= 8 && y >= 1 && y <= 8 && !mark[(x-1)*8+y];
}
void BFS(int x ,int y)
{
queue<NODE>q;
xin.x = x ,xin.y = y ,xin.t = 0;
memset(mark ,0 ,sizeof(mark));
mark[(x-1)*8+y] = 1;
dis[(x-1)*8+y][(x-1)*8+y] = 0;
q.push(xin);
while(!q.empty())
{
tou = q.front();
dis[(x-1)*8+y][(tou.x-1)*8+tou.y] = tou.t;
q.pop();
for(int i = 0 ;i < 8 ;i ++)
{
xin.x = tou.x + dir[i][0];
xin.y = tou.y + dir[i][1];
xin.t = tou.t + 1;
if(ok(xin.x ,xin.y))
{
mark[(xin.x-1)*8+xin.y] = 1;
q.push(xin);
}
}
}
return ;
}
int main ()
{
char str[150];
int i ,j ,k ,x ,y;
for(i = 1 ;i <= 8 ;i ++)
for(j = 1 ;j <= 8 ;j ++)
BFS(i ,j);
while(~scanf("%s" ,str))
{
int len = strlen(str);
int id = 0;
for(i = 0 ;i < len ;i += 2)
{
x = str[i+1] - '0';
y = str[i] - 'A' + 1;
node[++id].x = x;
node[id].y = y;
}
int ans = INF;
for(i = 1 ;i <= 64 ;i ++) //终点
for(j = 1 ;j <= 64 ;j ++) //相遇点
for(k = 2 ;k <= id ;k ++) //相遇的那个骑士
{
int s = 0;
x = (j-1) / 8 + 1;
y = j % 8;
if(!y) y = 8;
s = maxx(abss(x - node[1].x),abss(y - node[1].y));
s += dis[(node[k].x - 1) * 8 + node[k].y][j];
s += dis[j][i];
for(int w = 2 ;w <= id ;w ++)
{
if(w == k) continue;
s += dis[(node[w].x-1)*8+node[w].y][i];
}
if(s < ans) ans = s;
}
if(id == 1) ans = 0;
printf("%d\n" ,ans);
}
return 0;
}
POJ1178枚举三个地方(所有点都去同一个点)的更多相关文章
- [Effective Java]第三章 对所有对象都通用的方法
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- eclipse导入/导出项目要注意三个地方
这个三个地方的jdk必须保持一致,不报错
- Redis内存——内存消耗(内存都去哪了?)
最新:Redis内存--三个重要的缓冲区 最新:Redis内存--内存消耗(内存都去哪了?) 最新:Redis持久化--如何选择合适的持久化方式 最新:Redis持久化--AOF日志 更多文章... ...
- from表单上提交的数据都去了哪里呢?
from表单上提交的数据都去了哪里呢? 一个简单的from案例如下: <form> 姓名:<br> <input type="text" name=& ...
- MySQL 中删除的数据都去哪儿了?
不知道大家有没有想过下面这件事? 我们平时调用 DELETE 在 MySQL 中删除的数据都去哪儿了? 这还用问吗?当然是被删除了啊 那么这里又有个新的问题了,如果在 InnoDB 下,多事务并发的情 ...
- 年近30的Java程序员为了达到月入三万的目标,都做了哪些准备?
1.我觉得像我这般年纪的(29岁),有相对扎实技术功底的(就不自谦了),对赚钱有着强烈欲望的程序员,应该定一个切实的小目标——五年内月入三万! 之所以要定这个目标,最主要的原因是老婆的批评刺痛了我—— ...
- 程序员的“三十而已”,你都30岁了,不会还在XXX吧?
一部<三十而已>火了 太太们的包包鄙视链出圈了 有人的地方就有江湖 是的,程序员入圈是容易的 不需要4万的LV,更不需要限量版的爱马仕 只需要一件耐躁的格子衫 然而,程序员的30岁, 却说 ...
- Effective Java读书笔记——第三章 对于全部对象都通用的方法
第8条:覆盖equals时请遵守通用的约定 设计Object类的目的就是用来覆盖的,它全部的非final方法都是用来被覆盖的(equals.hashcode.clone.finalize)都有通用约定 ...
- 阿里三面Android开发岗都过了,但是无理由挂了,竟是HR骚操作?
进入互联网大厂一般都是"过五关斩六将",难度堪比西天取经,但当你真正面对这些大厂的面试时,有时候又会被其中的神操作弄的很是蒙圈. 近日,某位程序员发帖称,自己去阿里面试Androi ...
随机推荐
- 【Arduino学习笔记01】关于Arduino引脚的一些笔记
参考链接:https://www.yiboard.com/thread-831-1-1.html Arduino Uno R3 - 引脚图 Arduino Uno R3 - 详细参数 Arduino ...
- [unknown source] 整数拆分
一.题目 题目描述 定义一个整数拆分序列 \(a\) 的权值为: \[\sum_{i=1}^n\sum_{j=1}^{i-1}\gcd(a_i,a_j) \] 求对于一个整数 \(n\) 所有整数拆分 ...
- 《数据持久化与鸿蒙的分布式数据管理能力》直播课答疑和PPT分享
问:hi3861开发板支持分布式数据库吗? 目前,分布式数据库仅支持Java接口,因此Hi3861没有现成的API用于操作分布式数据库. 问:分布式数据管理包括搜索吗? 分布式数据管理包括融合搜索能力 ...
- Lombok 常用注解总结
本文转载自知乎专栏 极乐科技.有所整理. 主要注解 @Data @Setter @Getter @Log4j @AllArgsConstructor @NoArgsConstructor @Equal ...
- 平方十位数(蓝桥杯第八届国赛真题 JAVA-B组)
思路:从大到小枚举,判断其平方是否不重复 答案:9814072356 //水题 标题:平方十位数 由0~9这10个数字不重复.不遗漏,可以组成很多10位数字. 这其中也有很多恰好是平方数(是某个数的平 ...
- 2019看雪CTF 晋级赛Q2第四题wp
上次参加2019看雪CTF 晋级赛Q2卡在了这道题上,虽然逆出算法,但是方程不会解,哈哈哈哈,果然数学知识很重要呀,现在记录一下. 首先根据关键信息,根据错误提示字符串定位到这里: 1 int __t ...
- SynchronousQueue核心源码分析
一.SynchronousQueue的介绍 SynchronousQueue是一个不存储元素的阻塞队列.每一个put操作必须等待一个take操作,否则不能继续添加元素.SynchronousQueue ...
- vue文本滚动组件
看了好多网上的文本组件,发现好多都有这样那样的问题:特别是滚动的时候失真的感觉,今天整合了文本滚动的方式用CSS的 animation写出一套组件:VUE项目直接用.感觉有用的朋友关注下 效果图, ...
- docker部署skywalking
https://www.cnblogs.com/xiao987334176/p/13530575.html
- BUAA_2021_SE_READING_#1
项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 个人阅读作业#1 我在这个课程的目标是 通过课程学习,完成第一个可以称之为"软件"的项目 ...