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 ;
}

 

POJ 2488 -- A Knight's Journey(骑士游历)的更多相关文章

  1. POJ 2488 A Knight's Journey(深搜+回溯)

    A Knight's Journey Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) ...

  2. POJ 2488 A Knight's Journey(DFS)

    A Knight's Journey Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 34633Accepted: 11815 De ...

  3. poj 2488 A Knight's Journey 【骑士周游 dfs + 记忆路径】

    题目地址:http://poj.org/problem?id=2488 Sample Input 3 1 1 2 3 4 3 Sample Output Scenario #1: A1 Scenari ...

  4. POJ 2488 A Knight's Journey (回溯法 | DFS)

    题目链接:http://poj.org/problem?id=2488 题意: 在国际象棋的题盘上有一个骑士,骑士只能走“日”,即站在某一个位置,它可以往周围八个满足条件的格子上跳跃,现在给你一个p ...

  5. poj 2488 A Knight's Journey( dfs )

    题目:http://poj.org/problem?id=2488 题意: 给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径. #include <io ...

  6. Poj 2488 A Knight's Journey(搜索)

    Background The knight is getting bored of seeing the same black and white squares again and again an ...

  7. [poj]2488 A Knight's Journey dfs+路径打印

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 45941   Accepted: 15637 Description Bac ...

  8. POJ 2488 A Knight's Journey【DFS】

    补个很久之前的题解.... 题目链接: http://poj.org/problem?id=2488 题意: 马走"日"字,让你为他设计一条道路,走遍所有格,并输出字典序最小的一条 ...

  9. POJ 2488 A Knight's Journey

    题意:给一个n×m的棋盘,如果一个骑士可以从任意一个位置出发不重复的走遍棋盘的每个格子就输出字典序最短的路径. 解法:dfs.暴搜n×m次,只是被字典序输出坑了……而且字母是列序号数字是行序号……这两 ...

随机推荐

  1. Nginx如何配置基础缓存

    // /path/to/cache/:用于缓存的本地磁盘目录 // levels :在 /path/to/cache/ 设置了一个两级层次结构的目录. // 将大量的文件放置在单个目录中会导致文件访问 ...

  2. MSP432 BSL流程(UART)

    升级流程 PC程序会解析脚本中的命令,根据命令码做相应的操作.数据来自于命令后的文件(当前目录下的数据文件) # cat script_P4xx_uart.txt LOG //记录日志 MODE P4 ...

  3. CHD-5.3.6集群上sqoop安装

    Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ...

  4. 在线播放mp4

    在线播放mp4 1.准备好支持再网页上播放的mp4格式 AVC(h264) 格式的mp4 2.用ckplayer控制播放 (1)到ckplayer下载js.如:http://www.ckplayer. ...

  5. Linux磁盘的管理

    文件系统 磁盘必须要有文件系统---数据库 文件系统是用来数据存储,数据库是用来管理数据 windows fat32  ntfs   exfat linux  单文件系统 inode--索引空间(文件 ...

  6. 桌面Ubuntu卡死解决方案

    通常情况下,我们用桌面Ubuntu会遇到卡住的的情况,我们一般会进行强制关机处理,但其实还有另一种操作,不用强制关机. 切换到tty模式,执行命令pkill X;start X;就能重新进入桌面,不用 ...

  7. HTML5新特性——1 HTML5音频

    注意:<source>同一个音乐可以添加不同格式的音频,这样就可以满足不同浏览器都能够正常播放,兼容不同浏览器. 代码示例: <!doctype html> <html ...

  8. osm2pgsql

    osm2pgsql -d gis --create --slim --drop --flat-nodes '/data/nodes.bin' -G --hstore --tag-transform-s ...

  9. Elasticsearch:search template

    我们发现一些用户经常编写了一些非常冗长和复杂的查询 - 在很多情况下,相同的查询会一遍又一遍地执行,但是会有一些不同的值作为参数来查询.在这种情况下,我们觉得使用一个search template(搜 ...

  10. win10 LTSC 2019 激活

    win 10 打开终端 1.slmgr -ipk M7XTQ-FN8P6-TTKYV-9D4CC-J462D 2.slmgr -skms kms.03k.org 3.slmgr -ato 4. slm ...