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 ...
随机推荐
- Ognl中根元素与非根元素的关系
Ognl中根元素与非根元素的关系 根元素:可以理解为全局变量 非根元素:局部变量 从两者获取其属性的方式看: Object obj = Ognl.parseExpression(“[1]”); [1] ...
- Android中数据库的操作流程详解
Android中数据库的操作方法: 1.Android平台提供了一个数据库辅助类来创建或打开数据库. 这个辅助类继承自SQLiteOpenHelper类.继承和扩展SQLiteOpenHelper类主 ...
- VB.NET的反射机制
1.前提 Net的应用程序由几个部分:‘程序集’.‘模块’.‘类型’组成. 装配件是.Net应用程序执行的最小单位,编译出来的.dll..exe都是装配件. 2.概念 反射是获得运行时类型的方式. 概 ...
- node.js(七) 子进程 child_process模块
众所周知node.js是基于单线程模型架构,这样的设计可以带来高效的CPU利用率,但是无法却利用多个核心的CPU,为了解决这个问题,node.js提供了child_process模块,通过多进程来实现 ...
- Android 开源库
http://www.cnblogs.com/hawkon/p/3593709.html
- 使用meaven打包过程中遇到的一些问题
开始使用如下代码进行打包 <build> <!-- mvn assembly:assembly -Dmaven.test.skip=true --> <plugins&g ...
- poj3090--欧拉函数
#include<iostream> using namespace std; //欧拉函数 int eular(int n){ ,i; ;i*i<=n;i++){ ){ n/=i; ...
- 指针直接赋值为整型AND利用宏定义求结构体成员偏移量
首先我们要更正一个很熟悉的概念,那就是指针不仅仅是“地址”,指针还有一个很重要的特性,那就是“类型”. 指针初始化时,“=”的右操作数; 除外,该语句表示指针为空): 所以 ; 这样的代码是不允许的. ...
- Log4Net Config Appender
整理了下以前项目中使用的Log4Net的Appender. 1:只记录在一个文件下的 <appender name="RollingFileAppenderFileSize" ...
- RapidMiner的基本使用(一个医疗数据的简单决策树算法分析)
RapidMiner的基本使用(一个医疗数据的简单决策树算法分析) RapidMiner的基本使用(一个医疗数据的简单决策树算法分析) 需要分析的文件: 右键分别创建读取excel数据,选择属性,设置 ...