<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的更多相关文章

随机推荐

  1. Delphi 停靠技术的应用

    一.基础知识介绍 1.VCL组件的基础知识 在TWinControl类中有一个DockSite属性(boolean),它的作用是是否允许别的控件停靠在它的上面:在TControl类中有一个DragKi ...

  2. css的继承、层叠和特殊性

    1,继承  css的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代. 但注意有一些css样式是不具有继承性的.如border: ...

  3. 2016030201 - github上创建项目

    具体步骤如下: 前提是你已经由github账户,登陆你的账户后 步骤1:点击右下角+new repository 2.添加代码库描述内容,比如reposltory name 例如我创建的内容 3.点击 ...

  4. 不支持关键字: “userid”。

    运行程序提示:不支持关键字: “userid”. 找了很久在一篇博客里面提示web.config数据库字符串链接出错.

  5. 《深入剖析Tomcat》阅读(三)

    这里要介绍下Tomcat的一个重要设计方法,Catalina设计方式. Servlet容器是一个复杂系统,但是,它有三个基本任务,对每个请求,servlet容器会为其完成以下三个操作: 1.创建一个R ...

  6. 各大Oj平台介绍[转]

    1.题库与网站资源题库-在线提交系统(Online Judge)简介   下面是几个比较大的在线提交系统(OnlineJudge)里面有大量历年的竞赛题目,注册一个ID,然后用自己熟悉的语言(一般有P ...

  7. [BZOJ 1336] [Balkan2002] Alien最小圆覆盖 【随机增量法】

    题目链接:BZOJ - 1336 题目分析 最小圆覆盖有一个算法叫做随机增量法,看起来复杂度像是 O(n^3) ,但是可以证明其实平均是 O(n) 的,至于为什么我不知道= = 为什么是随机呢?因为算 ...

  8. js backbone

    http://www.the5fire.com/backbone-js-tutorials-pdf-download.html http://www.infoq.com/cn/articles/mob ...

  9. jsp分页技术

    1.以下为分页类: import java.io.Serializable;  import java.util.List;    import org.apache.commons.lang.bui ...

  10. 安装drupal练习网站遇到的问题

    1 Skip #conjunction key in __clone() method of core/includes/database/query.inc 解决方案:https://www.dru ...