HDOJ-三部曲一(搜索、数学)- A Knight's Journey
A Knight's Journey
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other)
Total Submission(s) : 51 Accepted Submission(s) : 17
Background The knight is getting bored of seeing the same black and white squares again and again and has decided to make a journey around the world. Whenever a knight moves, it is two squares in one direction and one square perpendicular to this. The world of a knight is the chessboard he is living on. Our knight lives on a chessboard that has a smaller area than a regular 8 * 8 board, but it is still rectangular. Can you help this adventurous knight to make travel plans? Problem Find a path such that the knight visits every square once. The knight can start and end on any square of the board.
1 1
2 3
4 3
#include<iostream>
#include<cstring>
using namespace std;
int m,n;
int c; //已走过的步数
bool f; //标记是否找到答案了
int chess[30][30]={0};
int step[2][8]={{-1, 1,-2, 2,-2,2,-1,1}, //每一种可能的走法,注意要按字典序排列
{-2,-2,-1,-1, 1,1, 2,2}};
char ans1[64];
int ans2[64];
bool move(int i,int j,int k)
{
if(i+step[0][k]>=0&&i+step[0][k]<m&&j+step[1][k]>=0&&j+step[1][k]<n&&!chess[i+step[0][k]][j+step[1][k]])
{
chess[i+step[0][k]][j+step[1][k]]=1;
return true;
}
else
return false;
}
void DFS(int i,int j)
{ ans1[c]=j+'A';
ans2[c]=i+1; if(c==m*n) //找到结果,回退
{
f=true;
return;
}
for(int t=0;t<8;t++) //尝试每一种走法
{
if(move(i,j,t))
{
c++;
DFS(i+step[0][t],j+step[1][t]);
if(c==m*n) //如果找到结果就一直回退
return;
chess[i+step[0][t]][j+step[1][t]]=0; //还原
c--;
}
}
return;
} int main()
{
int T;
cin>>T;
int t=T;
while(T--)
{
int i,j,k;
cin>>m>>n;
for(j=0;j<n;j++)
{
for(i=0;i<m;i++)
{
c=1;
memset(chess,0,sizeof(chess));
chess[i][j]=1;
f=false;
DFS(i,j);
if(f)
{
cout<<"Scenario #"<<t-T<<":"<<endl;
for(k=1;k<=m*n;k++)
cout<<ans1[k]<<ans2[k];
cout<<endl;
break;
}
}
if(f)
break;
}
if(!f)
{
cout<<"Scenario #"<<t-T<<":"<<endl;
cout<<"impossible"<<endl;
}
cout<<endl;
}
}
HDOJ-三部曲一(搜索、数学)- A Knight's Journey的更多相关文章
- A Knight's Journey 分类: POJ 搜索 2015-08-08 07:32 2人阅读 评论(0) 收藏
A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 35564 Accepted: 12119 ...
- POJ2488-A Knight's Journey(DFS+回溯)
题目链接:http://poj.org/problem?id=2488 A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Tot ...
- POJ 2488 A Knight's Journey(深搜+回溯)
A Knight's Journey Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) ...
- 迷宫问题bfs, A Knight's Journey(dfs)
迷宫问题(bfs) POJ - 3984 #include <iostream> #include <queue> #include <stack> #incl ...
- poj2488 A Knight's Journey裸dfs
A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 35868 Accepted: 12 ...
- POJ2488A Knight's Journey[DFS]
A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 41936 Accepted: 14 ...
- POJ 2488 A Knight's Journey(DFS)
A Knight's Journey Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 34633Accepted: 11815 De ...
- A Knight's Journey 分类: dfs 2015-05-03 14:51 23人阅读 评论(0) 收藏
A Knight’s Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 34085 Accepted: 11621 ...
- poj2488 A Knight's Journey
A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 24840 Accepted: ...
随机推荐
- nodeschool.io 8
~~ HTTP COLLECT ~~ Write a program that performs an HTTP GET request to a URL provided toyou as the ...
- javascript实现对象的继承的方式
在JavaScript将原型链作为实现继承的主要方法.基本原理是利用原型让一个subType引用superType的属性和方法 推荐链接 http://www.jb51.net/article/204 ...
- java多线程的常用方法(以及注意事项)
/* * 线程的常用方法 * 1.start(); * 2.run(); * 3.sleep(int millsecond); * 4.isAlive(); -->判断线程是否还在运行 * 5. ...
- 用Visual C#向access添加数据
(1)创建并打开一个OleDbConnection对象. (2)创建一个插入一条记录的SQL语句. (3)创建一个OleDbCommand对象. (4)通过此OleDbCommand对象完成对插入一条 ...
- C语言知识整理(1):简介
由于项目要求,需要学习iOS移动端开发.iOS开发的核心语言是Objective-C,Objective-C是在C语言的基础加了一层面向对象的语法.为了能够更好地掌握Objective-C,故先学习C ...
- jQuery学习小结3——AJAX
一.jQuery的Ajax方法 jQuery对Ajax 做了大量的封装,使用起来也较为方便,不需要去考虑浏览器兼容性.对于封装的方式,jQuery 采用了三层封装: 最底层的封装方法为——$.ajax ...
- [转]Integer.valueOf(String) 方法之惑
具体问题以前偶然遇到过,好象是一个java答题得分的论坛,当时做错还研究了下怎么回事,但是前两天遇到类似问题却没想起来.巩固下基础,转了下面文章. 以下内容转自:http://www.importne ...
- JBOss启动只能在本机访问的解决办法
环境CentOS6.4_X64 JBoss:5.1.2 eap 启动:JBOSS_HOME/bin/run.sh 在本机可以通过http://localhost:8080访问,而其他机器无论是通过机器 ...
- double int char 数据类型
贴心的limits... 测试代码: #include <iostream> #include <stdio.h> #include <limits> #inclu ...
- 使用Apache HttpClient
在一般情况下,如果只是需要Web站点的某个简单页面提交请求并获取服务器响应,完全可以使用前面所介绍的HttpConnection来完成.但在绝大部分情况下,Web站点的网页可能没这么简单,这些页面并不 ...