2015-06-05

问题简述:

  有一个 p*q 的棋盘,一个骑士(就是中国象棋里的马)想要走完所有的格子,棋盘横向是 A...Z(其中A开始 p 个),纵向是 1...q。

  原题链接:http://acm.tju.edu.cn/toj/showp1702.html

解题思路:

  DFS:深搜把所有情况都考虑一遍,当骑士走出棋盘或走到原来走过的格子时,旅行失败了;当骑士能一直走下去直到走过的格子数等于 p*q 时,旅行成功。

  提交过程中一直有一个问题使这个代码一直WA,最后才发现是 p、q输入反了,先输入的数是 q(也就是纵向的数字标号)。。。

源代码:

 /*
OJ: TOJ
ID: 3013216109
TASK: 1702.A Knight's Journey
LANG: C++
NOTE: DFS
*/
#include <cstdio>
#include <cstring> int n,p,q,flag;
int x[]={-,-,-,-,,,,};
int y[]={-,,-,,-,,-,};
char tmp[]={"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};
char ans1[];
int ans2[];
int visited[][]; bool dfs(int a,int b) {
if(!visited[a][b]) visited[a][b]=;
else return false;     //如果走到已经走过的棋盘,则失败
ans1[flag]=tmp[a-];
ans2[flag]=b;
flag++;
if(flag>=p*q) return true; //走完所有的格子,则成功
for(int i=;i<;i++) {
if(a+x[i]>&&a+x[i]<=p&&b+y[i]>&&b+y[i]<=q&&dfs(a+x[i],b+y[i]))
return true;    //如果下一步不走出棋盘且能走完剩下的格子,则成功
}
visited[a][b]=;
flag--;            //回溯
return false;        //不能成功的走完所有的格子,则失败
} int main()
{
scanf("%d",&n);
int i,j,k=;
while(n--) {
printf("Scenario #%d:\n",k++);
scanf("%d %d",&q,&p);
flag=;
memset(visited,,sizeof(visited));
int solved=;
for(i=;i<=p;i++) {
for(j=;j<=q;j++) { //遍历所有可能的起点
if(dfs(i,j)) {
solved=;
for(int l=;l<p*q;l++)
printf("%c%d",ans1[l],ans2[l]);
printf("\n\n");
break;
}
}
}
if(!solved)
printf("impossible\n\n");
}
return ;
}

TOJ 1702.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. POJ 2488 A Knight's Journey(深搜+回溯)

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

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

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

随机推荐

  1. 怎样调通微信支付及微信发货通知接口(Js API)

    怎样调通微信支付及微信发货通知接口(Js API) 微信支付提供了一个支付測试页面,微信支付正式使用须要測通支付.发货通知接口 .告警接口.维权接口.告警接口.维权接口非常easy.支付界面调通也相对 ...

  2. 依据Path取Json指定节点的值

    下面方法为依据Path取json节点值得方法.废话不多说,先上代码: 測试方法例如以下:

  3. ASP.NET MVC 学习之路-2

    本文在于巩固基础 为了方便理解MVC框架,我们先创建空的ASP.NET MVC模板 下面是创建后的项目结构 每个文件或者文件夹的作用 App_Data 应用程序数据--- 顾名思义是放置文件或者数据库 ...

  4. 加密传输SSL协议2_传统加密

    原本到了睡觉的时间,但是做完了SSL的笔记还有GCC和Oracle等的好多的笔记,所以刻苦一点. The Priciple of Encryption/Decryption --conventiona ...

  5. C#正则提取HTML中img的url值

    /// <summary> /// 取得HTML中所有图片的 URL. /// </summary> /// <param name="sHtmlText&qu ...

  6. Android Material Design调色板

    转: http://www.stormzhang.com/design/2014/12/26/material-design-palette/ Material Design出来一段时间了,身为And ...

  7. Activity之间定时跳转

    起源:很多应用在打开时,首先会加载欢迎页面,经过几秒后再跳转到主页面. 下面,我通过两种不同的方式来实现页面的定时跳转. 第一种方式: 通过Timer类的schedule方法. 实现从MainActi ...

  8. [转]struct 用法深入探索

    struct用法深入探索 作者: Cloudward 1. struct的巨大作用 面对一个人的大型C/C++程序时,只看其对struct的使用情况我们就可以对其编写者的编程经验进行评估.因为一个大型 ...

  9. 复习-C语言内嵌汇编-初级(2)

    汇编取出内存中的值 # include <stdio.h> int main() { ; ; int *p = &i; //ret = *p; __asm__( "ldr ...

  10. IOS 访问系统粘贴板

    粘贴板提供了一种核心OS特性,用于跨应用程序共享数据.用户可以跨应用来复制粘贴,也可以设置只在本应用中复制粘贴用来保护隐私. UIPasteboard类允许访问共享的设备粘贴板以及内容,下面代码返回一 ...