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 ...
随机推荐
- python更新模块
pip install -U 模块名 # 这是 python2+ 版本的用法更新模块 pip3 install -U 模块名 # 这是 python3+ 版本的用法更新模块
- Spring笔记:事务管理
Spring笔记:事务管理 事务管理 Spring事务管理是通过SpringAOP去实现的.默认情况下Spring在执行方法抛出异常后,引发事务回顾,当然你可以用拦截器或者配置去改变它们. 这部门内容 ...
- Android:日常学习笔记(6)——探究活动(4)
Android:日常学习笔记(6)——探究活动(4) 活动的启动模式 standard模式 standard是活动默认的启动模式,在不进行显示定义的情况下,所有活动都会自动使用这种启动模式. stan ...
- SpringMVC:学习笔记(3)——REST
SpringMVC:学习笔记(3)——REST 了解REST风格 按照传统的开发方式,我们在实现CURD操作时,会写多个映射路径,比如对一本书的操作,我们会写多个URL,可能如下 web/delete ...
- AJAX实现弹窗显示详情,全选和批量删除
以Nation表为例,将Nation表显示在页面上,每一行数据前面加上复选框,后面加上查看详情,点击以弹窗形式显示每一行的数据,并且在表格最后一行加上全选复选框,点击选中全部数据,后面跟一个批量删除按 ...
- SQL Server 简单事务学习
select * from bank ) ) --打开一个事务 begin tran --定义临时变量 ; set @num = @num + @@error; --上一条语句出错次数 set @nu ...
- mysql插入一张表里的数据到另一张表
公司的一个项目,做报表--要关联的表结构比较多,最后决定把要用的数据集合到一张新表中,需要用到以下的sql语法......分享下: web开发中,我们经常需要将一个表的数据插入到另外一个表,有时还需要 ...
- MyBatis SQL 生成方法 增删改查
此类根据JAVA实体BEAN生成MYBATIS的接口SQL(mapper) package com.sicdt.sicsign.bill.service.hessian; import java.la ...
- 标准输出:1>,2>,1>&2,2>&1
在 shell 程式中,最常使用的 FD (file descriptor) 大概有三个, 分别是: 0 是一个文件描述符,表示标准输入(stdin)1 是一个文件描述符,表示标准输出(stdout) ...
- linux之下载工具wget
常用格式:wget options URL -b, --background 启动后转入后台执行 -c, --continue 接着下载没下载完的文件 - ...