POJ2488A Knight's Journey
http://poj.org/problem?id=2488
题意 : 给你棋盘大小,判断马能否走完棋盘上所有格子,前提是不走已经走过的格子,然后输出时按照字典序排序的第一种路径
思路 : 这个题吧,有点别扭,再加上要用字典序输出,所以就要用一点小技巧了,自己提前将能输出字典序的那个先写到数组里保存,也就是说,搜索方向要进行特殊的排列,而这样的话,只要每次找的时候从第0行第0列开始找,第一个成功走完所有的格子一定是按字典序排列的,因为只要能走完所有的格子,而字典序最小的就是左上角那个格子,所以,直接从那个开始遍历就行了,如果马是中间那个位置,那就按照那个顺序来遍历即可
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std ;
int dix[] = {-,,-,,-,,-,} ;//按照这个方向进行遍历
int diy[] = {-,-,-,-,,,,} ;
const int maxn = ;
int xx[maxn],yy[maxn] ;
int mark,m,n;
int vis[maxn][maxn] ;
void dfs(int x,int y,int step)
{
int ax,ay ;
vis[x][y] = step ;
if(m*n == step)
{
mark = ;
return ;
}
for(int i = ; i < ; i++)
{
ax = x+dix[i] ;
ay = y+diy[i] ;
if(ax>=&&ax<m&&ay>=&&ay<n&&!vis[ax][ay])
{
xx[step] = ax ;//因为要输出路径,所以要用数组保存
yy[step] = ay ;
dfs(ax,ay,step+);
if(mark)
return;
vis[ax][ay] = ;
}
}
}
void Init()
{
memset(vis,,sizeof(vis)) ;
memset(xx,,sizeof(xx)) ;
memset(yy,,sizeof(yy)) ;
}
int main()
{
int t;
cin>>t;
for(int i = ; i <= t ; i ++)
{
cin>>m>>n;
int step ;
cout<<"Scenario #"<<i<<":"<<endl;
Init() ;
mark = ;
step = ;
xx[] = ;
yy[] = ;
dfs(,,step) ;//从(0,0)点开始遍历
if(mark)
{
for(int k = ; k < m*n ; k++)
printf("%c%d",yy[k]+'A',xx[k]+);
cout<<endl<<endl;
}
if(!mark)
cout<<"impossible"<<endl<<endl;
}
return ;
}
POJ2488A 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 ...
- poj2488 A Knight's Journey
A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 24840 Accepted: ...
- poj2488--A Knight's Journey(dfs,骑士问题)
A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31147 Accepted: 10 ...
- 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 ...
- TOJ 1702.A Knight's Journey
2015-06-05 问题简述: 有一个 p*q 的棋盘,一个骑士(就是中国象棋里的马)想要走完所有的格子,棋盘横向是 A...Z(其中A开始 p 个),纵向是 1...q. 原题链接:http:// ...
随机推荐
- 引入OO开发报表后的感想
很早就想尝试着在常规的报表开发中 引入OO了 趁着程序略复杂 时间略充裕 终于尝试了一把-咩哈哈~~ 以下来自我的evernote笔记 有点语无伦次-忍忍~~ -------------------- ...
- C# 枚举操作扩展类
using System; using System.Linq; using System.ComponentModel; namespace Demo.Common { /// <summar ...
- ubuntu 14.04 apt-get 方式安装oracle JDK
之前已经写了 如何手动安装oracle 的JDK :http://www.cnblogs.com/bcsflilong/p/4196536.html 其实 还有可以简单方便的用apt-get 的方式安 ...
- 一款jQuery打造的滚动条在底部滑出信息提示层
一款jQuery打造的滚动条在底部滑出信息提示层, 当滚动鼠标滚轮,或者滚动条往下拉的时候,在右下角,弹出一个信息提示框. 有一点仿的是一个插件工具,就是网页中大家都长用到的友荐. 这款特效算一款简单 ...
- struts2 type="redirect"源码解析
首先解释一下几个名词: request.getRequestDispatcher()是请求转发,前后页面共享一个request ; response.sendRedirect()是重新定向,前后页面不 ...
- python自学笔记二
:#进入循环重输文0件名 pass else:#退出循环,等待创建 break fobj = open(fname,'a')#打开或创建文件 #接下来写入文件 all = [] print('ente ...
- Spark 大数据平台 Introduction part 2 coding
Basic Functions sc.parallelize(List(1,2,3,4,5,6)).map(_ * 2).filter(_ > 5).collect() *** res: Arr ...
- MVVM学习
1:MVVMLight中通过IOC注册的服务或者是类是全局的整个工程都能访问到 2:向下的结构(viem→VM→Model)也不严格是这样 3:延迟SimpleIoc的注册 4:在Navigatedt ...
- linux 线程笔记
线程与进程关键字对比 创建新流 fork/pthread_create 退出控制流 exit/pthread_exit 获取退出状态 waitpid/pthread_join 在退出时的清理工作 at ...
- Oracle 学习路径
学习路线图: 学习的方法和思路: 有了google为什么还需要学习? 有了官方文档还需要学习了吗? 工作角色: 开发人员:SQL操作数据库,PL/SQL实现逻辑结构.企业需要最多.对逻辑思维要求比较高 ...