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的更多相关文章
随机推荐
- SVN遇到Can't convert string from 'UTF-8' to native encoding
刚配好mysql,svn co代码的时候遇到问题 svn: Can't convert string from 'UTF-8' to native encoding: svn: platform/co ...
- JavaScript学习心得(四)
条件语句 任何事物非真即假. 在JavaScript中,条件判断以下情况为假: false NaN 0 空串 null undefined 在使用相等运算符时,建议将数字写在相等运算符的左边.全等比较 ...
- OC语言-02面向对象的三大特性
01封装 #import <Foundation/Foundation.h> @interface Student : NSObject { //@public 成员变量尽量不使用 int ...
- C语言学习总结(三) 复杂类型
第五章.复杂数据类型 (数组.字符串.指针.结构体.枚举.共同体) 1.什么是数组? 概念:把具有相同类型的若干变量按有序的形式组织起来,这些按序排列的同类数据元素的集合称为数组: 按数组元素的类型不 ...
- APCS
arm汇编程序中,R0,R1,R2,R3,R12都是作为中间寄存器,而R4-R11是不能随便使用的,暂时我还不知它们的用途.所以,中间寄存器,在程序运行的开始处与结束的时候值是可以不一样的,也就是说中 ...
- oracle 自动增长
在SQLSERVER和MYSQL里面自动增长字段直接设置就可以.在ORACLE里面就复杂多了.特别是我这样的初学者,不过网络是最好的老师,看了很多相关介绍,本人使用的是使用触发器.具体如下: 首先要创 ...
- sleep与wait的区别,详细解答(通过代码验证)
package com.ysq.test; /** * sleep与wait的区别: * @author ysq * */ public class SleepAndWait { public sta ...
- oralce闪回
Oracle闪回操作 1. 记录当前时间或SCN 在数据库变动前记录时间或SCN SQL> select to_char(sysdate,'YYYY-MM-DD HH24:mi:ss') fr ...
- 使用spm build 批量打包压缩seajs 代码
一,安装环境 1.安装spm spm工具是基于node(nodejs的服务平台)的,因此我们需要先安装 node 和 npm 下载地址:http://nodejs.org/#download.下载完成 ...
- tyvj P1075 - 硬币游戏 博弈DP
P1075 - 硬币游戏 From price Normal (OI)总时限:10s 内存限制:128MB 代码长度限制:64KB 背景 Background 农民John的牛喜欢玩 ...