题意:

      有一个国王和很多骑士,他们都要到某一个点去集合,然后问所有人都到达某个终点的距离和最小是多少?过程中如果国王遇到了一个骑士的话,国王就可以和骑士一起按照骑士的走法走,这是两个人算一个人,同时国王有八种走法,骑士也有八种走法,两个不一样。

思路:

      可以枚举终点,和骑士相交的点还有和那个骑士相交,只要确定这三个点后距离就出来了,求距离可以用广搜预处理,也可以用最短路预处理,不管用什么记得细心点,还有对于国王的最短路直接可以算出来,就是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枚举三个地方(所有点都去同一个点)的更多相关文章

  1. [Effective Java]第三章 对所有对象都通用的方法

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. eclipse导入/导出项目要注意三个地方

    这个三个地方的jdk必须保持一致,不报错

  3. Redis内存——内存消耗(内存都去哪了?)

    最新:Redis内存--三个重要的缓冲区 最新:Redis内存--内存消耗(内存都去哪了?) 最新:Redis持久化--如何选择合适的持久化方式 最新:Redis持久化--AOF日志 更多文章... ...

  4. from表单上提交的数据都去了哪里呢?

    from表单上提交的数据都去了哪里呢? 一个简单的from案例如下: <form> 姓名:<br> <input type="text" name=& ...

  5. MySQL 中删除的数据都去哪儿了?

    不知道大家有没有想过下面这件事? 我们平时调用 DELETE 在 MySQL 中删除的数据都去哪儿了? 这还用问吗?当然是被删除了啊 那么这里又有个新的问题了,如果在 InnoDB 下,多事务并发的情 ...

  6. 年近30的Java程序员为了达到月入三万的目标,都做了哪些准备?

    1.我觉得像我这般年纪的(29岁),有相对扎实技术功底的(就不自谦了),对赚钱有着强烈欲望的程序员,应该定一个切实的小目标——五年内月入三万! 之所以要定这个目标,最主要的原因是老婆的批评刺痛了我—— ...

  7. 程序员的“三十而已”,你都30岁了,不会还在XXX吧?

    一部<三十而已>火了 太太们的包包鄙视链出圈了 有人的地方就有江湖 是的,程序员入圈是容易的 不需要4万的LV,更不需要限量版的爱马仕 只需要一件耐躁的格子衫 然而,程序员的30岁, 却说 ...

  8. Effective Java读书笔记——第三章 对于全部对象都通用的方法

    第8条:覆盖equals时请遵守通用的约定 设计Object类的目的就是用来覆盖的,它全部的非final方法都是用来被覆盖的(equals.hashcode.clone.finalize)都有通用约定 ...

  9. 阿里三面Android开发岗都过了,但是无理由挂了,竟是HR骚操作?

    进入互联网大厂一般都是"过五关斩六将",难度堪比西天取经,但当你真正面对这些大厂的面试时,有时候又会被其中的神操作弄的很是蒙圈. 近日,某位程序员发帖称,自己去阿里面试Androi ...

随机推荐

  1. JavaScript快速上手

    引入JavaScript项目 在html中 <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  2. Django之Auth认证模块

    一.Auth模块是什么 Auth模块是Django自带的用户认证模块: 我们在开发网站的时候,无可避免的需要设计实现网站的用户系统,此时我们需要实现包括用户注册,用户登陆,用户认证,注销修改密码等功能 ...

  3. Ignatius and the Princess III HDU - 1028

    题目传送门:https://vjudge.net/problem/HDU-1028 思路:整数拆分构造母函数的模板题 1 //#include<bits/stdc++.h> 2 #incl ...

  4. io流(文件字符流(FileReader,FileWriter文件的复制))

    文件字符流(FileReader,FileWriter文件的复制) 文件的复制 效率低的方法 注意:字符流需要刷新操作,字节流不需要,只有刷新后才可以将程序中的内容导入到目标文件中 package c ...

  5. 【Makefile】2-Makefile的介绍及原理

    目录 前言 概念 Chapter 2:介绍 2.1 makefile的规则 2.3 make 是如何工作的 ** 2.5 让 make 自动推导 2.8 Makefile 里面有什么 2.9 Make ...

  6. SpringBoot中整合Redis、Ehcache使用配置切换 并且整合到Shiro中

    在SpringBoot中Shiro缓存使用Redis.Ehcache实现的两种方式实例 SpringBoot 中配置redis作为session 缓存器. 让shiro引用 本文是建立在你是使用这sh ...

  7. for what? while 与 until 差在哪?-- Shell十三问<第十三问>

    for what? while 与 until 差在哪?-- Shell十三问<第十三问> 最后要介绍的是 shell script 设计中常见的"循环"(loop). ...

  8. Dynamics CRM分享记录后出现关联记录被共享的问题

    Dynamics CRM的权限配置有许多的问题,其中分享功能也是未来解决标准功能分配的权限不满足需求而设计的.但是这个功能使用的时候也要注意,否则会出现其他记录被共享的问题导致数据泄露可能会对项目的安 ...

  9. OO_Unit2 关于性能优化与测试的那些事

    OO_Unit2 关于性能优化与测试的那些事 OO的第2单元到本周也就正式完结了.尽管这个单元的主旋律是多线程,但"面向对象"的基本思想仍然是我们一切架构与优化的出发点与前提.因此 ...

  10. django-数据库的增删改查操作

    django-数据库的增删改查操作 1.添加用户记录 def login(request): 增加用户记录 使用save()方法来增加记录 username = UserInfo(username=' ...