poj2488:http://poj.org/problem?id=2488

题意:给你一张地图,然后有一个骑士,骑士可以从地图的任意一个方格开始,作为起点,问你该骑士能否走遍整张题图。
题解:首先想到就是DFS,但是要对每个点进行一次DFS,时间复杂度估计hold不住,后来一想,有些点,不必搜索。因为已经收过,所以可以采取记忆化搜索。
但是这一题的难点不是这里,在于所谓的字典序输出,一开始不知道这里的字典序是指什么。后来才知道,就是找字母小的,字母相同就找数字小的,这样一来搜索到额顺序就确定了。

#include<cstring>
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
int map1[][];
int map2[][];
int n,m;
int xx[];
int yy[];
int num;
void DFS(int x,int y){
xx[++num]=x;
yy[num]=y;
map2[x][y]=;
int dir[][]={{-,-},{,-},{-,-},{,-},{-,},{,},{-,},{,}};
for(int i=;i<;i++){
if(x+dir[i][]<=n&&x+dir[i][]>=&&y+dir[i][]<=m&&y+dir[i][]>=){
if(!map2[x+dir[i][]][y+dir[i][]]){
DFS(x+dir[i][],y+dir[i][]);
}
} }
if(num==n*m)return;
num--;//注意这里,如果没有当前没有找到全部的点并且有无路可走,
map2[x][y]=;//那么必须回溯,之前所记录的路中的点必须删除,而且该点应该被改为没有被访问过
}
int main(){
int t;
scanf("%d",&t);
int ttt=;
while(t--){
scanf("%d%d",&n,&m);
memset(map1,,sizeof(map1));
for(int j=;j<=m;j++){
for(int i=;i<=n;i++){
if(!map1[i][j]){
map1[i][j]=;
memset(map2,,sizeof(map2));
num=;
DFS(i,j);
if(num==n*m)
break;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
if(map2[i][j])
map1[i][j]=map2[i][j];//统计之前已经找过的点
}
}
}
if(num==n*m)
break;
}
printf("Scenario #%d:\n",ttt++);
if(num==n*m){
for(int i=;i<=n*m;i++){
printf("%c%d",'A'+yy[i]-,xx[i]);//注意这里的输出,把整型转化成A,B等字符
}
}
else
printf("impossible");
printf("\n\n"); }
}

A Knight's Journey的更多相关文章

  1. POJ2488A Knight's Journey[DFS]

    A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 41936   Accepted: 14 ...

  2. POJ2488-A Knight's Journey(DFS+回溯)

    题目链接:http://poj.org/problem?id=2488 A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Tot ...

  3. A Knight's Journey 分类: POJ 搜索 2015-08-08 07:32 2人阅读 评论(0) 收藏

    A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 35564 Accepted: 12119 ...

  4. HDOJ-三部曲一(搜索、数学)- A Knight's Journey

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

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

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

  6. A Knight's Journey 分类: dfs 2015-05-03 14:51 23人阅读 评论(0) 收藏

    A Knight’s Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 34085 Accepted: 11621 ...

  7. poj2488 A Knight's Journey

      A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 24840   Accepted:  ...

  8. TOJ 1702.A Knight's Journey

    2015-06-05 问题简述: 有一个 p*q 的棋盘,一个骑士(就是中国象棋里的马)想要走完所有的格子,棋盘横向是 A...Z(其中A开始 p 个),纵向是 1...q. 原题链接:http:// ...

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

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

  10. 迷宫问题bfs, A Knight's Journey(dfs)

    迷宫问题(bfs) POJ - 3984   #include <iostream> #include <queue> #include <stack> #incl ...

随机推荐

  1. Mysql新建用户和数据库并授权

    测试环境:Centos 6.3和Mysql 5.3 一.新建用户 //登录MYSQL@>mysql -u root -p@>密码//创建用户mysql> insert into my ...

  2. java Permissions and Security Policy--官方文档

    3 Permissions and Security Policy 3.1 The Permission Classes The permission classes represent access ...

  3. 从高德 SDK 学习 Android 动态加载资源

    前不久跑去折腾高德 SDK 中的 HUD 功能,相信用过该功能的用户都知道 HUD 界面上的导航转向图标是动态变化的.从高德官方导航 API 文档中 AMapNaviGuide 类的描述可知,导航转向 ...

  4. shell脚本调试 分类: 学习笔记 linux ubuntu 2015-07-14 12:49 53人阅读 评论(0) 收藏

    1.sh -x script 这将执行脚本并显示所有变量的值 如,脚本: #!/bin/bash #a test about shift if [ $# -le 0 ] then echo " ...

  5. C#,MVC视图中把枚举转成DropdownList

    1.拓展EnumHelper public static class EnumHelper { // Get the value of the description attribute if the ...

  6. Android四大组件之一:ContentProvider(内容提供者)

    Android中还提供了名为ContentProvider(内容提供者),可以向其他应用提供数据,但不常用,除非是同一公司开发的App,可以向不同应用提供数据.虽然为Android的四大组件之一,但用 ...

  7. angularjs kindEditor 中自定义按钮 弹出dialog

    1.angular-kindeditor.js 第38行左右加 editorConfig.items = ["placehoder"]; 2.en.js 第234行 placeho ...

  8. SQLite 入门教程(四)增删改查,有讲究

    增删改查操作,其中增删改操作被称为数据操作语言 DML,相对来说简单一点. 查操作相对来说复杂一点,涉及到很多子句,所以这篇先讲增删改操作,以例子为主,后面再讲查操作. 一.插入数据 INSERT I ...

  9. php验证是否为手机端还是PC

    <?php $forasp = strtolower($_SERVER['HTTP_USER_AGENT']); if(strpos($forasp,'mobile')==true) { ech ...

  10. iOS远程消息推送自我整理版

    @interface AppDelegate () <UIApplicationDelegate> @end @implementation AppDelegate - (BOOL)app ...