题目大意: 输入一个p*q的棋盘, 行用数字表示, 列用大写字母表示 , 1 <= p*q <= 26, 输出能够把棋盘全部空格走完且每个空格只走一次的字典序最小的路径。不存在则输出“impossible”

坑の所在: 行列的表示, 每组解后有一空行。

思路: 八方向dfs,方向数组要按字典序排列, 记录步数, 最先找到的一组解便是字典序最小解,便可停止搜索。

AC代码:

#include<iostream>
#include<cstdio>
using namespace std;
int p, q;
bool vis[30][30];
int d[8][2] = { -1,-2, 1,-2, -2,-1, 2,-1, -2,1, 2,1, -1,2, 1, 2 };
struct node{
int x, y;
}next[30][30];
bool check(int a, int b)
{
if(a >= 0 && a < p && b >= 0 && b < q) return true;
return false;
}
bool stop;
void init()
{
for(int i = 0; i < 30; i++)
for(int k = 0; k < 30; k++){
vis[i][k] = false;
next[i][k].x = next[i][k].y = -1;
}
vis[0][0] = true;
stop = 0;
}
void dfs(int a, int b, int step)
{
if(step == p*q) {
stop = true;
return;
}
for(int i = 0; i < 8; i++){
int dx = a + d[i][0];
int dy = b + d[i][1];
if(check(dx, dy) && !vis[dx][dy]){
next[a][b].x = dx;
next[a][b].y = dy;
vis[dx][dy] = true;
//cout<<a<<" "<<b<<" "<<next[a][b].x<<" "<<next[a][b].y<<endl;
dfs(dx, dy, step+1);
if(stop) return;
vis[dx][dy] = false;
}
}
}
void output()
{
int a = 0, b = 0, t, step = 1;
printf("%c%d", a+'A', b+1);
while(step < p*q){
printf("%c%d", next[a][b].y+'A', next[a][b].x+1);
t = a;
a = next[a][b].x;
b = next[t][b].y;
step++;
}
printf("\n");
} int main()
{
int T;
cin>>T;
for(int k = 1; k <= T; k++){
scanf("%d%d", &p, &q);
init();
dfs(0, 0, 1);
printf("Scenario #%d:\n", k);
if(stop) output();
else printf("impossible\n");
if(k != T)printf("\n");
}
return 0;
}
作者:u011652573 发表于2014-6-1 15:36:08 原文链接
阅读:33 评论:0 查看评论

[原]poj-2488-water-DFS的更多相关文章

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

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

  2. POJ.3172 Scales (DFS)

    POJ.3172 Scales (DFS) 题意分析 一开始没看数据范围,上来直接01背包写的.RE后看数据范围吓死了.然后写了个2^1000的DFS,妥妥的T. 后来想到了预处理前缀和的方法.细节以 ...

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

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

  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 2331] Water pipe ID A*迭代加深搜索(dfs)

    Water pipe Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 2265 Accepted: 602 Description ...

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

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

  7. poj 2488 A Knight&#39;s Journey(dfs+字典序路径输出)

    转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://poj.org/problem? id=2488 ----- ...

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

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

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

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

  10. POJ 2488 DFS

    DES:给一个n行m列的棋盘.马以L型走.问能否从某一位置开始走完棋盘上的每个位置.若能继续输出字典序最小的一条路径. 很典型的dfs.搜的时候就按照字典序从小到大的顺序.搜到第一条路径时停止搜索输出 ...

随机推荐

  1. Android入门视频推荐

      marschen老师的Android入门视频推荐网址: 1.Android应用程序开发视频教程(重制版)第一季 2.Android应用开发视频教程(重制版)第二季 2.marschen老师的个人微 ...

  2. Codeforces Round #277.5 (Div. 2)

    题目链接:http://codeforces.com/contest/489 A:SwapSort In this problem your goal is to sort an array cons ...

  3. HBAO

    nv算是坑死我了,之前下的hbao的sample这次怎么都找不到 http://developer.download.nvidia.com/SDK/10.5/direct3d/samples.html ...

  4. AngularJs学习笔记--Guide教程系列文章索引

    在很久很久以前,一位前辈向我推荐AngularJs.但当时我没有好好学习,仅仅是讲文档浏览了一次.后来觉醒了……于是下定决心好好理解这系列的文档,并意译出来(英文水平不足……不能说是翻译,有些实在是看 ...

  5. lagstash + elasticsearch + kibana 3 + kafka 日志管理系统部署 02

    因公司数据安全和分析的需要,故调研了一下 GlusterFS + lagstash + elasticsearch + kibana 3 + redis 整合在一起的日志管理应用: 安装,配置过程,使 ...

  6. geotools解析SLD中的elsefilter为什么里面的filter无效

    原因是在org.geotools.renderer.lite.StreamingRenderer中的process函数: /** * @param rf * @param feature * @par ...

  7. 简单CSS hack:区分IE6、IE7、IE8、Firefox、Opera

    一.跨浏览器的网页设计一直是让人很头疼的问题,这不只是因为浏览器的版本众多,还有一个重要的原因是相同浏览器的不同时期的版本也会有差异,甚至是在不同操作同台上还会有不同.因此使CSS hack技术进行浏 ...

  8. POJ 2891 Strange Way to Express Integers (解一元线性方程组)

    求解一元线性同余方程组: x=ri(mod ai) i=1,2,...,k 解一元线性同余方程组的一般步骤:先求出前两个的解,即:x=r1(mod a1)     1x=r2(mod a2)     ...

  9. iOS导航栏-关闭半透明

    self.navigationController.navigationBar.translucent = NO;

  10. iOS-CAEmitterLayer(粒子效果)

    扩展:https://github.com/lichtschlag/Dazzle  ;     , , , ); , );     .f;     .f;     ;     .f;     .f; ...