poj1778
在一个 8*8 的棋盘里有一个国王和一些骑士,我们要把他们送到同一顶点上去。 国王能
够选择一名骑士作为坐骑,而与骑士一起行动(相当于一个骑士),同一位置, 同一时刻可
以有多个骑士。问最少走的步数。 骑士的行动方式如下图所示。

输入格式:
仅有一行,包含一个字母和数字间隔的字符串,先字母再数字,字母仅可能是大写的 A
到 H,数字只可能是 1 到 8,描述国王和骑士的坐标位置,第一个是国王的坐标,后面都是
骑士的坐标,显然字母是列号,数字是行号。
输出格式:
仅有一个数,表示题目要求的最少步数。
样例输入: D4A3A8H1H8
样例输出: 10
数据范围:字符串的长度不会超过 128。
爆搜
枚举64个相遇点
再枚举64个国王JBSM的点
#include<iostream>
#include<cstring>
#include<cmath>
#define MN 64
#define MV 100000
#define min(a,b) a<=b?a:b
#define max(a,b) a>=b?a:b
using namespace std;
int dir[][]={{-,-},{-,-},{-,},{-,},{,-},{,-},{,},{,}};
int f[][MN+][MN+],kn[MN+][],n=,t[MN+];
bool lim(int x, int y)
{
return x>= && x< && y>= && y<;
}
void csh()
{
int i,j,k,t1,t2,p1,p2;
for (i=;i<MN;i++) for (j=;j<MN;j++)
{
if (i==j) f[][i][j]=f[][i][j]=;
else f[][i][j]=f[][i][j]=MV;
}
for (i=;i<;i++) for (j=;j<;j++) for (k=;k<;k++)
{
t1=i+dir[k][];t2=j+dir[k][];
if (lim(t1,t2))
{
p1=i*+j;p2=t1*+t2;
f[][p1][p2]=f[][p1][p2]=;
}
}
}
void floyd()
{
int i,j,k;
for (k=;k<MN;k++) for (i=;i<MN;i++) for (j=;j<MN;j++)
{
f[][i][j]=min(f[][i][k]+f[][k][j],f[][i][j]);
f[][i][j]=min(f[][i][k]+f[][k][j],f[][i][j]);
}
}
int main()
{
int i,j,k,D,d1,d2,x,y,ans,king,s;
char C[];csh();floyd();
while (scanf("%s",C)!=EOF)
{
n=(strlen(C)-)/;ans=MV;
if (n==) {cout<<;continue;}
king=(C[]-'A')+(C[]-'')*;
for (i=,j=;i<n;i++,j+=) t[i]=(C[j]-'A')+(C[j+]-'')*;
for (i=;i<MN;i++)
{
s=;
for (k=;k<n;k++) s+=f[][t[k]][i];
for (j=;j<MN;j++)
{
d1=f[][king][j];d2=MV;
for (k=;k<n;k++) d2=min(d2,f[][t[k]][j]+f[][j][i]-f[][t[k]][i]);
ans=min(ans,s+d1+d2);
}
}
cout<<ans<<endl;
}
//system("pause");
}
poj1778的更多相关文章
- poj1778 All Discs Considered
思路: 拓扑排序.贪心. 实现: #include <bits/stdc++.h> using namespace std; vector<]; int n1, n2; inline ...
随机推荐
- github代码托管
下载github客户端软件 1) 官网下载help.github.com 2) 百度搜索,一般用于windows7以前的系统 安装github软件 按照软件提示安装即可.不过,博主倾向使用命令行工 ...
- 0608pm单例模式and面向对象的六大原则
//把类控制住,不让外界造她的对象class DA{ public $name; static private $dx;//存放对象的变量 //将构造变为私有,外界没法造对象 private func ...
- PHP 实现Session入库/存入redis
对于大访问量的站点使用默认的Session 并不合适,我们可以将其存入数据库.或者使用Redis KEY-VALUE数据存储方案 首先新建一个session表 CREATE TABLE `sessio ...
- 函数的调用规则(__cdecl,__stdcall,__fastcall,__pascal)
关于函数的调用规则(调用约定),大多数时候是不需要了解的,但是如果需要跨语言的编程,比如VC写的dll要delphi调用,则需要了解. microsoft的vc默认的是__cdecl方式,而windo ...
- ubuntu 12.04.2 基于 L3.0.35_1.1.0_121218_source LTIB 问题汇总
1)解压L3.0.35_1.1.0_121218_source.tar.gz 2)cd L3.0.35_1.1.0_121218_source ,执行./install 3) 复制 patch-l ...
- spring boot未配置数据源报错
我拷贝了一个springboot 项目,然后去掉了数据源配置启动报错 : Cannot determine embedded database driver class for database ty ...
- iOS_核心动画CALayer(一)
目 录: 一.核心动画简介 二.图层与视图之间的关系 三.CALayer的使用说明 四.CALayer的隐式动画属性 五.在CALayer上绘图 六.总结 一.核心动画简介 Core Anim ...
- 基于matlab的边缘提取方法的比较
1.Matlab简述 Matlab是国际上最流行的科学与工程计算的软件工具,它起源于矩阵运算,已经发展成一种高度集成的计算机语言.有人称它为“第四代”计算机语言,它提供了强大的科学运算.灵活的程序设计 ...
- C++字符串操作库函数
#include <bits/stdc++.h> using namespace std; int main() { ]="; ]="abcdefg"; ]= ...
- Whitewidow:SQL 漏洞自动扫描工具
Whitewidow 是一个开源的 SQL 漏洞自动扫描器,可用通过文件列表运行,或者从 Google 爬取并发现有潜在漏洞的网站. 这个工具支持自动格式化文件.随机用户代理.IP 地址.服务器信息. ...