题目地址:http://poj.org/problem?id=2488

Sample Input

3
1 1
2 3
4 3

Sample Output

Scenario #1:
A1 Scenario #2:
impossible Scenario #3:
A1B3C1A2B4C2A3B1C3A4B2C4

题目:给你一个p*q的棋盘,规则布局参考上图。列用字母表示,行用数字表示。这样一个左上角的节点就是(A,1)。
骑士的棋子走日字形状,可以从任意节点出发,终点也是任意的。问你能不能遍历所有的位置,并输出这样的路径,如果
存在多条路径,输出字典序最小的那条路径。
分析:按照上面那个图片的提示,从当前位置出发遍历8个方向,如果最后能到达,得到的就是字典序最小的序列。
起点一定会是(A1)。直接从A1开始dfs。
通过这道题,再次体会到回溯的地方。。。。。。
code:
#include<stdio.h>
#include<string.h>
#include <queue>
#include <stack>
#include <algorithm>
#define Max 21 using namespace std; int n, m;
bool vis[30][30];
int x[]={-1, 1, -2, 2,-2, 2,-1, 1};
int y[]={-2,-2, -1,-1, 1, 1, 2, 2};
//从当前马的位置可以走到的8个位置
//在满足字典序最小的前提下 这8个方向的遍历先后不能变动
bool ok; struct node
{
int col, row;
}path[1000];
int e=0; bool sure(int i, int j)
{
if(i>=1 && i<=n && j>=1 && j<=m)
return true;
else
return false;
} void dfs(int i, int j, int cnt)//cnt表示我们在当前这次dfs偶中搜索到的节点
{
path[cnt].col=j; path[cnt].row=i;//当前位置进入路径队列 if(cnt==n*m){
ok=true; return; //所有节点都已经遍历到
}//在这return 开始往回回溯 int a, b;
for(int k=0; k<8; k++){ a=i+x[k];
b=j+y[k];
if(sure(a, b) && !vis[a][b]){
vis[a][b]=true;
dfs(a, b, cnt+1);
if(ok==true) return;//在这return 返回主函数
vis[a][b]=false;
}
}
return;
} int main()
{
int tg; scanf("%d", &tg);
int cnt=1; while(tg--)
{
scanf("%d %d", &n, &m);
ok=false;
if(n==1 && m==1){
printf("Scenario #%d:\n", cnt++);
printf("A1\n\n");
continue;
}
else{
ok=false;
memset(vis, false, sizeof(vis));
vis[1][1]=true;
e=0;
dfs(1, 1, 1); if(!ok){
printf("Scenario #%d:\n", cnt++);
printf("impossible\n\n");
}
else{
printf("Scenario #%d:\n", cnt++);
for(int i=1; i<=n*m; i++)
{
printf("%c%d", path[i].col+'A'-1, path[i].row );
}
printf("\n\n");
}
}
}
return 0;
}


poj 2488 A Knight's Journey 【骑士周游 dfs + 记忆路径】的更多相关文章

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

    POJ 2488 -- A Knight's Journey(骑士游历) 题意: 给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径. 经典的“骑士游历”问题 ...

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

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

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

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

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

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

  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. ios -过滤字符串特殊字符

    //过滤 " [ ] " + (NSString *)onTwoCommseparatedWithString:(NSString *)string { //过滤 " [ ...

  2. Linq中GroupBy方法的使用总结(转载)

    from:https://www.cnblogs.com/zhouzangood/articles/4565466.html Group在SQL经常使用,通常是对一个字段或者多个字段分组,求其总和,均 ...

  3. windows下sshfs挂载远程文件夹-server could not connect故障解决

    使用sshfs挂载server上面的文件夹到windows中.轻松方便. 在之前的系统上挂载.没出问题. 近期买了块固态硬盘.装了个系统. 结果在系统上执行sshfs时报例如以下错误: 事实上非常ea ...

  4. cocos2d-x 游戏优化方案

    优化的方案: 引擎底层优化.纹理优化.渲染优化.资源缓存.内存优化. 纹理优化: cocos2d-x 底层是OPenGL ES实现的. 对于图案片载入的内存是2的幂次方. 使用的图片是100*128 ...

  5. lua(仿单继承)

    --lua仿单继承 Account = { balance = } function Account:new(o) o = o or {} setmetatable(o, self)--Account ...

  6. python学习【第十篇】单例设计模式

    单例设计模式 目的:让类创建对象,在系统中只有唯一的实例,让每一次创建的对象返回的内存地址都是相同的. __new__方法 使用类名创建对象时,python解释器首先会调用__new__方法为对象分配 ...

  7. RedHat6/Centos6.5安装mongodb

    1 设置mongodb目录 [root@localhost /]# cd home/ [root@localhost home]# mkdir mongodb/db 2 配置yum [root@loc ...

  8. Javascript-Switch

    JavaScript Switch 语句 请使用 switch 语句来选择要执行的多个代码块之一. 语法 switch(n) { case 1: 执行代码块 1 break; case 2: 执行代码 ...

  9. 如何定义 match 常量?

    namespace MathConstants { const double E = 2.71828182845904523536; // e const double LOG2E = 1.44269 ...

  10. jquery生成二维码图片

    1.插件介绍 jquery.qrcode.min.js插件是jq系列的基于jq,在引入该插件之前要先引入jq.能够在客户端生成矩阵二维码QRCode 的jquery插件 ,使用它可以很方便的在页面上生 ...