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 ...
随机推荐
- Javascript学习,DOM对象,方法的使用
JavaScript: ECMAScript: BOM: DOM: 事件 DOM的简单学习 功能:控制html文档内容 代码:获取页面标签(元素)对象和Element document.getElem ...
- 用java输出"Hello,World!"
Hello,World! 一般步骤 随便新建一个文件夹,存放代码 新建一个java文件 新建.txt文档 文件后缀名改为.java Hello.java [注意]系统可能没有显示后缀名,我们需要手动打 ...
- 关于 FreeBSD 老版本如何安装软件
关于 FreeBSD 不被支持版本如何安装软件: ALLOW_UNSUPPORTED_SYSTEM=yes写到/etc/ make.conf 如果提示没有make.conf 请手动新建一个文 ...
- Intellij IDEA实用插件Lombok
使用@Data注解后 可以不用给属性添加get.set方法也可以使用get.set方法,但是必须添加lombok Plugin插件 1 打开设置Setting,选中Plugins,搜索并安装Lombo ...
- webpack核心模块tapable用法解析
前不久写了一篇webpack基本原理和AST用法的文章,本来想接着写webpack plugin的原理的,但是发现webpack plugin高度依赖tapable这个库,不清楚tapable而直接去 ...
- 一键获取linux内存、cpu、磁盘IO等信息脚本编写,及其原理详解
更多linux知识,请关注公众号:一口Linux 一.脚本 今天主要分享一个shell脚本,用来获取linux系统CPU.内存.磁盘IO等信息. #!/bin/bash # 获取要监控的本地服务器IP ...
- IDA报错fatal error before kernel init
编写了一个IDA64插件,结果再打开IDA后报错fatal error before kernel init,然后闪退. 检查了一遍代码没发现有问题,后来发现是环境有一处配置错误, IDA64.exe ...
- windows回收站无法设置
win+r运行 regedit HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer 修改NoRe ...
- 通过 ASM 库生成和修改 class 文件
在 JVM中 Class 文件分析 主要详细讲解了Class文件的格式,并且在上一篇文章中做了总结. 众所周知,JVM 在运行时, 加载并执行class文件, 这个class文件基本上都是由我们所写的 ...
- LevelDB 源码解析之 Arena
GitHub: https://github.com/storagezhang Emai: debugzhang@163.com 华为云社区: https://bbs.huaweicloud.com/ ...