TOJ 1702.A Knight's Journey
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的更多相关文章
- POJ2488A Knight's Journey[DFS]
A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 41936 Accepted: 14 ...
- POJ2488-A Knight's Journey(DFS+回溯)
题目链接:http://poj.org/problem?id=2488 A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Tot ...
- 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 ...
- HDOJ-三部曲一(搜索、数学)- A Knight's Journey
A Knight's Journey Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) ...
- POJ 2488 A Knight's Journey(DFS)
A Knight's Journey Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 34633Accepted: 11815 De ...
- 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 ...
- poj2488 A Knight's Journey
A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 24840 Accepted: ...
- POJ 2488 A Knight's Journey(深搜+回溯)
A Knight's Journey Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) ...
- 迷宫问题bfs, A Knight's Journey(dfs)
迷宫问题(bfs) POJ - 3984 #include <iostream> #include <queue> #include <stack> #incl ...
随机推荐
- javascritp第十课:面向对象
js中的函数就是对象,对象就是函数,当js中需要使用面向对象,使用js闭包模拟面向对象,当函数作为对象使用时,每个单词首字母都大写 var obj=new object(); //js中默认就是ob ...
- wormhole提升hivereader读取速度方案
背景: 最近dw用户反馈wormhole传输速度很慢,有些作业甚至需要3-4个小时才能完成,会影响每天线上报表的及时推送.我看了下,基本都是从Hive到其他数据目的地,也就是使用的是hivereade ...
- 【玩转Ubuntu】01. Ubuntu上配置JDK
一.安装JDK 提示:这里我们使用jdk1.6,因为android开发要求使用1.6.如果不信你可以打开android studio,它会提示你选择JDK6的路径 下载地址: http://www.o ...
- C语言中为什么不能把char**赋给const char**
这是我在知乎回答的一个问题. 这个问题是C中的一个深坑,首先说结论: char ** 和 const char ** 是两个不相容(incompatible)的类型,能够理解为不能直接赋值 在C11的 ...
- ie8不兼容input的placeholder属性但是要实现其效果的方法
通过学习前辈的思想,个人想法整理如下: 通过两个元素标签,仿造出placeholder的内容 使用position定位好两个元素标签 第一要隐藏两个元素标签display:none,在<!--[ ...
- css笔记:如何将一个页面平均分成四个部分?
今天,我在刷面试题的时候,突然想到一道题:如何将一个页面平均分成四个部分(div)呢?其实难度也不大,于是直接上代码 <!DOCTYPE html> <html lang=" ...
- perl 打开和关闭文件
#!/usr/bin/perl -w use strict; #print "please input a string\n"; #my $line = <STDIN> ...
- mysql获取各种日期
select curdate(); --获取当前日期 select last_day(curdate()); --获取当月最后一天. select DATE_ADD(curdate(),interva ...
- Android Intent实现页面跳转
Intent可以来协助完成Android各个组件之间的通信 1:startActivity(intent); //直接启动 /* ...
- nginx的配置说明
#定义Nginx运行的用户和用户组user www www; #nginx进程数,建议设置为等于CPU总核心数.worker_processes 8; #全局错误日志定义类型,[ debug | in ...