UVA439 水,枚举+BFS
2016-06-07 22:03
323 查看
0)
1这个题因为是方形的棋盘,所以x和y区分不是很重要。如果是矩形要注意输入的行和列与枚举的八个方向是否是一一对应的。
2根据ASC码得到序号,注意不是 变量名-'97' ,是下面这两种:
3注意使用queue或者stack,用完.front()之后,要及时pop()、
1)
2)
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.
the column and a digit (1-8) representing the row on the chessboard.
1这个题因为是方形的棋盘,所以x和y区分不是很重要。如果是矩形要注意输入的行和列与枚举的八个方向是否是一一对应的。
2根据ASC码得到序号,注意不是 变量名-'97' ,是下面这两种:
char a='a'; cout<<a-'a'<<endl;cout<<a-97<<endl; char b='0'; cout<<b-'0'<<endl;cout<<b-48<<endl;
3注意使用queue或者stack,用完.front()之后,要及时pop()、
1)
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
int mat[10][10];
int bj[10][10];
int dir[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2}, {1,-2},{1,2},{2,-1},{2,1}};
string str1;
string str2;
struct Node{
int x;
int y;
int moves;
};
int Bfs(){
struct Node cur;
struct Node obj;
struct Node next;
cur.x=str1[0]-97;
cur.y=str1[1]-49;//!!
obj.x=str2[0]-97;
obj.y=str2[1]-49;
cur.moves=0;
queue<struct Node> Q;
if(cur.x==obj.x&&cur.y==obj.y){
return 0;
}
Q.push(cur);
bj[cur.x][cur.y]=1;
while(!Q.empty()){
cur=Q.front();
Q.pop();
for(int i=0;i<8;i++){
next.x=cur.x+dir[i][0];
next.y=cur.y+dir[i][1];
next.moves=cur.moves+1;
if(next.x>7||next.x<0||next.y>7||next.y<0){
continue;
}
if(next.x==obj.x&&next.y==obj.y){
return cur.moves+1;
}
if(bj[next.x][next.y]==0){
Q.push(next);
bj[next.x][next.y]=1;
}
}
}
return -1;
}
int main()
{
/*
char a='a'; cout<<a-'a'<<endl;cout<<a-97<<endl; char b='0'; cout<<b-'0'<<endl;cout<<b-48<<endl;
*/
while(cin>>str1>>str2){
//cout<<b-'48'<<endl;
memset(bj,0,sizeof(bj));
memset(mat,0,sizeof(mat));
int mov=Bfs();
//cout<<mov<<endl;
cout<<"To get from "<<str1<<" to "<<str2<<" takes "<<mov<<" knight moves."<<endl;
}
return 0;
}
2)
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 Specification
The input file 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) representingthe column and a digit (1-8) representing the row on the chessboard.
Output Specification
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.
相关文章推荐
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- MFC程序启动时隐藏界面
- 允许远程用户登录访问mysql
- Java Instrument (三) 钩子函数
- 87. Scramble String
- 计算机视觉代码大全
- 204. Count Primes
- easyUI-tree
- XML.更好的文档类型定义.XML Schema
- 判断二叉树是不是平衡树
- 数组、LIst<> 、 ArrayList的性能对比
- discuz QQ互联登陆出现(1054) Unknown column “conuintoken” in “field list”
- 如何卸载干净MySQL,在重新装一个新的MySQL?(给新手)
- 01-java中“接口”的概念
- 给一道关于const的面试题
- 【整理】getopt和getopt_long函数
- SpringMVC中文乱码 controller乱码
- Maven创建项目(命令创建)
- onvif学习笔记8:最近写的一个ONVIF客户端的心得小结
- "快速排序"算法-之通俗易懂全面解析