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. jquery实现文字选择器

     $( "div:contains('John')" ).css( "text-decoration", "underline" ); 

  2. Jquery弹窗插件Lhgdialog的用法

    Lhgdialog的用法 大家都知道用js可以实现,但是在使用js实现的弹窗时得考虑很东西:浏览器的兼容.页面的交互等等问题. 在这里简单介绍一下lhgdialog的用法. 参数有: Title:弹窗 ...

  3. 如何在ASP.NET中用C#将XML转换成JSON 【转】

      本文旨在介绍如果通过C#将获取到的XML文档转换成对应的JSON格式字符串,然后将其输出到页面前端,以供JavaScript代码解析使用.或许你可以直接利用JavaScript代码通过Ajax的方 ...

  4. android开发之Animations的使用(二)

    android开发之Animations的使用(二) 本博文主要讲述的是android开发中的animation动画效果的使用,和上一篇博文不同的是,此次四种动画效果,主要使用的是xml文件实现的,提 ...

  5. 获取xml文件

    <?xml version="1.0" encoding="utf-8" ?><ArrayOfSystemRool xmlns:xsi=&qu ...

  6. Windows 7/Vista 开机自动登录

    “Win”+“R”打开命令窗口,输入"control userpasswords2"(不包括引号),或者 “rundll32 netplwiz.dll,UsersRunDll” 回 ...

  7. Git 系列(三):建立你的第一个 Git 仓库

    现在是时候学习怎样创建你自己的 Git 仓库了,还有怎样增加文件和完成提交. 在本系列前面的文章中,你已经学习了怎样作为一个最终用户与 Git 进行交互:你就像一个漫无目的的流浪者一样偶然发现了一个开 ...

  8. PHP程序输出日历

    以下代码只是简单实现日历的效果和逻辑思路,没有使用类封装,权当抛砖引玉,有兴趣的朋友可以封装起来,方便调用. <?php /** * PHP利用时间函数输出日历 * Rain.zen $ int ...

  9. jjs 产生undefined的情况

    <script type="text/javascript"> var outObj = { type :"java" } function inn ...

  10. STRUTS2核心控制器:FilterDispatcher

    1. 在 struts1.x 系列中 , 所有的请求是通过一个 servlet(ActionServlet) 来管理控制的 , 在 Struts2.X 而是经过一个 Filter 来处理请求的. St ...