Guangsoushensou 2
<span style="color:#330099;">/*
C - 广搜 基础
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
Submit Status
Description
A friend of you is doing research on the Traveling Knight Problem (TKP) where you are to find the shortest closed tour of knight moves that visits each square of a given set of n squares on a chessboard exactly once. He thinks that the most difficult part of the problem is determining the smallest number of knight moves between two given squares and that, once you have accomplished this, finding the tour would be easy.
Of course you know that it is vice versa. So you offer him to write a program that solves the "difficult" part. Your job is to write a program that takes two squares a and b as input and then determines the number of knight moves on a shortest route from a to b.
Input
The input will contain one or more test cases. Each test case consists of one line containing two squares separated by one space. A square is a string consisting of a letter (a-h) representing the column and a digit (1-8) representing the row on the chessboard.
Output
For each test case, print one line saying "To get from xx to yy takes n knight moves.".
Sample Input
e2 e4
a1 b2
b2 c3
a1 h8
a1 h7
h8 a1
b1 c3
f6 f6
Sample Output
To get from e2 to e4 takes 2 knight moves.
To get from a1 to b2 takes 4 knight moves.
To get from b2 to c3 takes 2 knight moves.
To get from a1 to h8 takes 6 knight moves.
To get from a1 to h7 takes 5 knight moves.
To get from h8 to a1 takes 6 knight moves.
To get from b1 to c3 takes 1 knight moves.
To get from f6 to f6 takes 0 knight moves.
By Grant Yuan
2014.7.12
*/
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
#include<cstdio>
using namespace std;
bool flag[21][21];
char a[21][21];
int n,m;
int s1,f1;
typedef struct{
int x;
int y;
}node;
int next[4][2]={1,0,0,1,-1,0,0,-1};
int sum;
node q[10000];
int top,base;
bool can(int cc,int dd)
{
if(cc>=0&&cc<m&&dd>=0&&dd<n&&flag[cc][dd]==0)
return 1;
return 0;
} void slove()
{ int c,d,cc,dd;
node q1;
while(top>=base){
// c=q.front().x;d=q.front().y;
c=q[base].x; d=q[base].y;
for(int i=0;i<4;i++)
{
cc=c+next[i][0];
dd=d+next[i][1];
if(can(cc,dd))
{ q1.x=cc;
q1.y=dd;
// cout<<cc<<" "<<dd<<endl;
//q.push(q1);
q[++top]=q1;
flag[cc][dd]=1;
sum++;
}
}
//q.pop();
base++;
}
} int main()
{ node q1;
while(1){
sum=1;
top=-1;base=0;
memset(flag,0,sizeof(flag));
cin>>n>>m;
if(n==0&&m==0)
break;
for(int i=0;i<m;i++){
// cout<<"zhang"<<endl;
scanf("%s",&a[i]);}
// for(int i=0;i<m;i++)
// puts(a[i]);
/*for(int i=0;i<m;i++)
puts(a[i]);*/
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{if(a[i][j]=='#')
flag[i][j]=1; if(a[i][j]=='@')
s1=i,f1=j;
}
q1.x=s1;
q1.y=f1;
flag[s1][f1]=1;
// for(int i=0;i<m;i++)
// for(int j=0;j<n;j++){
// cout<<flag[i][j];
// if(j==n-1) cout<<endl;}
//q.push(q1);
q[++top]=q1;
slove();
cout<<sum<<endl;
}
return 0;
}
</span>
版权声明:本文博主原创文章,博客,未经同意不得转载。
Guangsoushensou 2的更多相关文章
随机推荐
- quick-x 触摸事件的新方法
--[[ local function onTouch(event, x, y) print(event, x, y) if event == "began" then retur ...
- WebApi学习总结系列第四篇(路由系统)
由于工作的原因,断断续续终于看完了<ASP.NET Web API 2 框架揭秘>第二章关于WebApi的路由系统的知识. 路由系统是请求消息进入Asp.net WebApi的第一道屏障, ...
- imacros实现Excel数据自动录入到网页中
一.工具选择 最近接到一个项目,需要将excel数据逐条录入.保存到网页中.经过搜集资料,能实现功能的大概有以下几种方式,按键精灵.autoit.imacros.python+selenium. 按键 ...
- 上网必备AdBlock,远离广告!
浏览器广告拦截插件,绝对上网必备... 从此告别讨厌的百度边栏广告!!! https://getadblock.com/ https://adblockplus.org/zh_CN/
- 在CENTOS6上安装MONGODB
为接下来的工作热一下手.. 以前看过一本书,了解了,但好像有三四年,又忘了..:( 参考URL: http://www.centoscn.com/image-text/install/2014/112 ...
- h.264并行解码算法分析
并行算法类型可以分为两类 Function-level Decomposition,按照功能模块进行并行 Data-level Decomposition,按照数据划分进行并行 Function-le ...
- (转)Mono for Android 优势与劣势
最近有兴趣了解一下Mono for Andriod,也就是使用.NET平台来开发Andriod程序.Mono for Android API 几乎映射标准的Andriod API.例如,两边API几乎 ...
- apk,task,android:process与android:sharedUserId的区别
apk一般占一个dalvik,一个进程,一个task.通过设置也可以多个进程,占多个task. task是一个activity的栈,其中"可能"含有来自多个App的activity ...
- OOD/DDP 中的 SRP 原则
单一职责原则 SRP(The Single Responsibility Principle):一个类应该只有一个发生变化的原因.这里的变化指职责的变化. SRP 很好理解,它的要求是 让一个类只做一 ...
- MYSQL仅仅向某个字段进行插入
例子: mysql> show create table student \G . row *************************** Table: student Create T ...