POJ 2488 -- A Knight's Journey(骑士游历)

题意:

给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径。

经典的“骑士游历”问题

输入:第一行,整数n,接下来是n行,每一行为p和q,p为行数,q为列数,p用1...p编号,q用A...Q编号

马的走法:每步棋先横走或直走一格,然后再往外斜走一格;或者先斜走一格,最后再往外横走或竖走一格(即走"日"字)。可以越子,没有中国象棋中的"蹩马腿"限制。

解题思路:

dfs

 #include<iostream>
#include<cstring>
using namespace std;
int r,c;///行r,列c const int dr[] = {-, ,-, ,-,,-,};
const int dc[] = {-,-,-,-, ,, ,};
bool chess[]['Z'+]; struct square{
int row;
char col;
}; bool inside(int x,int y)
{
return x>= && x<=r && y>='A' && y<='A'+c-;
} bool dfs(square *way,int i,int j,int step)
{
chess[i][j]=true;
way[step].row=i;
way[step].col=j;
if(step==r*c)
return true; for(int k=;k<;k++) //骑士从当前位置尝试跳到其他位置
{
int ii,jj;
ii = i+dr[k];jj = j+dc[k];
if(!chess[ii][jj] && inside(ii,jj))
if(dfs(way,ii,jj,step+))
return true;
} chess[i][j]=false; //能执行到这步,说明前面跳的8步都不符合要求
return false; //即当前位置是错误位置,擦除记录返回上一步
} int main()
{
int n;
cin>>n;
for(int i=;i<=n;i++)
{
cin>>r>>c;
bool flag = false;
memset(chess,false,sizeof(chess));
square *way = new square[r*c+];
for(int i='A';i<='A'+c-;i++)
{
for(int j=;j<=r;j++)
{
flag = dfs(way,j,i,);
if(flag)
break;
}
if(flag)
break;
} ///打印解
cout<<"Scenario #"<<i<<":"<<endl;
if(flag)
{
for(int k=;k<=r*c;k++)
cout<<way[k].col<<way[k].row;
cout<<endl<<endl;
}else{
cout<<"impossible"<<endl<<endl;
} }
return ;
}

 

最新文章

  1. [译]DbContext API中使用SqlQuery和ExecuteSqlCommand获取存储过程的输入输出参数
  2. 论SOA架构的几种主要开发方式
  3. oracle查询小结
  4. java注释指导手册
  5. poj 2109 Power of Cryptography
  6. hdu 4608 I-number 大整数
  7. RecycleView 滑动到底部,加载更多
  8. Hadoop 实现对Value倒序排序
  9. 2.6. Statistical Models, Supervised Learning and Function Approximation
  10. JQuery中一个简单的表单验证的实例
  11. 机器学习技法:13 Deep Learning
  12. 解决CentOS出现&quot;No package redis available&quot;提示问题
  13. 使用 JavaScript 将 XML 转成 JSON
  14. Javascript中变量提升的问题(五)
  15. JDK 之 Java Bean 内省机制
  16. jquery获取浏览器各种高宽
  17. NYOJ 16 矩形嵌套(经典DP)
  18. Jenkins+Ant/maven+Svn实现自动化部署,编译,运行,测试结果自动邮件通知
  19. Linux-- su和sudo 切换用户
  20. 详说 CSS 清除浮动

热门文章

  1. 给datagrid一列中的数据加上单位
  2. 【Distributed】分布式Session一致性问题
  3. Python学习记录6-list、tuple、dict、set复习
  4. docker-compose 编排文件小疑点
  5. Linux学习笔记(二)Linux常用命令:权限、目录操作以及常见目录作用
  6. 01 js数据类型
  7. Some ML Tutorials
  8. shell脚本中case /*的作用
  9. Elasticsearch:运用scroll接口对大量数据实现更好的分页
  10. 4、docker镜像:花卷结构、commit镜像