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的更多相关文章
随机推荐
- 基于python做的抓图程序1.0.00版本
#coding=gbkimport urllibimport urllib2import reimport osimport time# import readline def getHtml(url ...
- failure injection
(1)malloc穷尽的情况: 假设下面的代码是测试代码,里面含有被测函数fmalloc,其中含有一个malloc语句,在一般情况下,是很难走到malloc失败的分支的,因为很难模拟系统内存耗尽的情况 ...
- C#委托(Delegate)学习日记
在.NET平台下,委托类型用来定义和响应应用程序中的回调.事实上,.NET委托类型是一个类型安全的对象,指向可以以后调用的其他方法.和传统的C++函数指针不同,.NET委托是内置支持多路广播和异步方法 ...
- autoconf automake libtool
这是一个 autoconf / automake 的 "Hello World"gztt.ll@gmail.com 主要步骤是- 准备工程目录结构和程序- autoscan 生成 ...
- tyvj 1150 绳子围点 Pick定理 防溢出策略
P1150 - 绳子围点 From 332404521 Normal (OI)总时限:10s 内存限制:128MB 代码长度限制:64KB 背景 Background 最近小小鱼在研 ...
- dispatch队列
GCD编程的核心就是dispatch队列,dispatch block的执行最终都会放进某个队列中去进行,它类似NSOperationQueue但更复杂也更强大,并且可以嵌套使用.所以说,结合bloc ...
- quartz源码解析--转
quartz源码解析(一) . http://ssuupv.blog.163.com/blog//146156722013829111028966/ 任何个人.任何企业.任何行业都会有作业调度的需求 ...
- log4j_slf4j log4j.properties
hibernate 使用的日志是slf4j,而 slf4j又有各种实现策略. 使用log4j 就是其中一种方式. 需要的jar 包: log4j-1.2.16.jar slf4j-api-1.6.1. ...
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
1. 背景 在Java5的多线程中,可以使用Callable接口来实现具有返回值的线程.使用线程池的submit方法提交Callable任务,利用submit方法返回的Future存根,调用此存根的g ...
- 【HDOJ】3584 Cube
三位树状数组. /* 3584 */ #include <iostream> #include <string> #include <map> #include & ...