给一个矩形棋盘,每次走日字,问能否不重复的走完棋盘的每个点,并将路径按字典序输出
*解法:按字典序输出路径,因此方向向量的数组按字典序写顺序,dfs+回溯,注意flag退出递归的判断,并且用pre记录路径
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char a[30][30];
int dx[] = {-2, -2, -1, -1, 1, 1, 2, 2};
int dy[] = {-1, 1, -2, 2, -2, 2, -1, 1};
int vis[30][30];
int P, Q, flag = 0;
struct node
{
int x, y;
}pre[30][30];
void dfs(int x, int y, int step)
{
if(step == P * Q)
{
flag = 1;
return;
}
if(flag) return;//全走完了之后就不用再走了
for(int i = 0; i < 8; i++)
{
int xx = x + dx[i], yy = y + dy[i];
if(xx >= 0 && xx < P && yy >= 0 && yy < Q && !vis[xx][yy])
{
vis[xx][yy] = 1;
step++;
pre[x][y] = (node){xx, yy};//用pre输出路径
dfs(xx, yy, step);
if(flag) return;//===全走完了之后就不用再走了===
vis[xx][yy] = 0;
step--;
}
}
return;
}
int main()
{
int T, cc = 0;
scanf("%d", &T);
while(T--)
{
scanf("%d %d", &Q, &P);
memset(vis, 0, sizeof(vis));
flag = 0;
vis[0][0] = 1;
dfs(0,0,1);
printf("Scenario #%d:\n", ++cc);
if(!flag) printf("impossible\n");
else
{
int ux = 0, uy = 0, vx, vy;
for(int i = 0; i < P * Q; i++)
{
char c = ux + 'A';
int z = uy + 1;
printf("%c%d", c, z);
vx = pre[ux][uy].x, vy = pre[ux][uy].y;
ux = vx, uy = vy;
}
printf("\n");
}
printf("\n");
}
return 0;
}

  

搜索 || DFS || POJ 2488 A Knight's Journey的更多相关文章

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

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

  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(深搜+回溯)

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

  4. 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 ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. Lua变量

    Lua 变量 变量在使用前,必须在代码中进行声明,即创建该变量. 编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值. Lua 变量有三种类型:全局变量.局部变量.表中的域. ...

  2. zabbix忘记登录密码重置方法

    1.忘记zabbix之后,先用mysql查看一下: [root@centos7-106 ~]# mysql -uroot -p -e "select * from zabbix.users\ ...

  3. 哈希加密和MD5加密函数

    import hashlib #----------------------------MD5算法 # def Md5(n): # m = hashlib.md5() # m=hashlib.sha2 ...

  4. vim的visual可视模式(转载)

    转自:http://www.cnblogs.com/chenyadong/archive/2011/08/30/2159809.html 为了便于选取文本,VIM 引入了可视(Visual)模式.要选 ...

  5. E20180424-hm

    thumb n. 拇指; (手套的) 拇指部份; trigger  vt. 引发,触发; 扣…的扳机; 发射或使爆炸(武器或爆炸性弹药);      n. (枪) 扳机; 起动装置,扳柄; 引发其他事 ...

  6. jQuery笔记之工具方法—Ajax 优化回调地狱

    在上一篇文我们说到了回调地狱不好的地方,今天我们看看怎么来优化它,让它可以运用到实际开发中. 什么是回调地狱?回调地狱就是一个函数里面嵌套了所有功能函数,然后缩略图形成一个三角形. 这样的代码可复用性 ...

  7. 密码(Password)

    #include<cstdio> #include<cstring> using namespace std; int k, cnt; ][][], ans[]; bool d ...

  8. Educational Codeforces Round 46 (Rated for Div. 2) E. We Need More Bosses

    Bryce1010模板 http://codeforces.com/contest/1000/problem/E 题意: 给一个无向图,求图的最长直径. 思路:对无向图缩点以后,求图的最长直径 #in ...

  9. JavaScript入门2

    5.document对象:Document对象是window对象的一个对象属性,代表浏览器窗口中装载的整个HTML文档.文档中的每个HTML元素对应着JavaScript对象. 因为document代 ...

  10. python中函数参数

    默认参数注意点 优点:灵活,当没有指定与形参对应的实参时就会使用默认参数 缺陷: 例子: >>> def h(m, l=[]):                    #默认参数时列 ...