<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. Type 类型

    修改 type 类型 UPDATE  wd_order2 SET  info = array_append(info, row(2,100001, now() )::info )  WHERE id_ ...

  2. 帝国cms灵动标签调用tags

    这个语法用来调用[指定分类][指定条件]的所有tags [e:loop={"select * from [!db.pre!]enewstags order by num desc limit ...

  3. POJ 2965 The Pilots Brothers' refrigerator 位运算枚举

      The Pilots Brothers' refrigerator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 151 ...

  4. php mysql PDO使用

    <?php $dbh = new PDO('mysql:host=localhost;dbname=access_control', 'root', ''); $dbh->setAttri ...

  5. [UOJ 25] [IOI 2014] Wall 【线段树】

    题目链接:UOJ - 25 题目分析 每个操作就是将被操作的数限制在一个区间,比如 Set_Max(5) 就是将被操作的数限定在了 [5, INF] 的区间里. 这些操作是可加的,但是必须按照顺序,不 ...

  6. 【技术贴】解决xp下Microsoft.SqlServer.Management.PSProvider.dll

    解决 安装SQLserver2008时有出错信息,提示:Configuration error description: 无法获得 C:\Program Files\Microsoft SQL Ser ...

  7. Web Scale IT 与 6 种 DevOps 工具

    新年伊始,在总结过去一年 IT 行业变化和发展的同时,不少企业更关注未来一年甚至几年的行业趋势.Gartner 于 2014 年发表了文章 Gartner Says By 2017 Web-Scale ...

  8. Bomb Game

    hdu3622:http://acm.hdu.edu.cn/showproblem.php?pid=3622 题意:你有n次,每次你可以在平面上放置一个点,并且每一次都会有两个位置可以选,每一次只能选 ...

  9. xmlns:android作用以及自定义布局属性

    要定制Android layout 中的 attributes关键是要明白android中命名空间定义如: xmlns:android="http://schemas.android.com ...

  10. lc面试准备:Invert Binary Tree

    1 题目 Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 接口: public TreeNod ...