hdu2488 dfs
Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
Description
The knight is getting bored of seeing the same black and white squares again and again and has decided to make a journey
around the world. Whenever a knight moves, it is two squares in one direction and one square perpendicular to this. The world of a knight is the chessboard he is living on. Our knight lives on a chessboard that has a smaller area than a regular 8 * 8 board, but it is still rectangular. Can you help this adventurous knight to make travel plans?
Problem
Find a path such that the knight visits every square once. The knight can start and end on any square of the board.
Input
Output
If no such path exist, you should output impossible on a single line.
Sample Input
3
1 1
2 3
4 3
Sample Output
Scenario #1:
A1 Scenario #2:
impossible Scenario #3:
A1B3C1A2B4C2A3B1C3A4B2C4
解析见代码
代码:
/*
hdu2488 深搜,判断能否走完全图,并要求输出路径
首先是能否走完全图的判断,深搜函数加一个参数step,
来判断是否走完全图,同时用flag进行标记,方便输出两种情况
再就是路径如何保存,只需要保存每一步的x,y坐标即可,使用
一个二位组就可以保存。同时因为vis数组是以步数为标准来进行保存的
其值会随着递归回溯不断更新,始终保证是最新解,step=p*q标志着递归
成功,按照步数输出即可,注注意格式要求的是先输纵坐标后输横坐标
*/
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
using namespace std;
const int maxn=100;
int vis[maxn*maxn][2];//vis二维数组,前一个参数代表是第几步,后一个参数0代表横坐标,后一个参数代表纵坐标。
int p,q,step,flag;
char maps[maxn][maxn];
int f[8][2]={{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};//输出要求按字典序输出,同时注意大写字母是列编号,所以方向数组应该是按照先y后x字典序开
int ans=0;
int dis[maxn][maxn];
void dfs(int x,int y,int step)
{
if(step==p*q&&flag==0)
{
cout<<"Scenario #"<<++ans<<":"<<endl;
for(int i=0;i<p*q;i++)
printf("%c%d",'A'+vis[i][1],vis[i][0]+1);
flag=1;
cout<<endl<<endl;//输出格式要求
return;
}
for(int i=0;i<8;i++)
{
int a=x+f[i][0];
int b=y+f[i][1];
if(a>=0&&a<p&&b>=0&&b<q&&!dis[a][b])
{
dis[a][b]=1;
vis[step][0]=a;
vis[step][1]=b;
dfs(a,b,step+1);
dis[a][b]=0;//回溯时该点状态恢复
if(flag) return;//相当于一个剪枝操作,找到就返回,大大提高了程序工作效率
}
}
}
int main()
{
int n;
cin>>n;
while(n--)
{
memset(dis,0,sizeof(dis));
cin>>p>>q;
flag=0;
dis[0][0]=1;//标记数组,避免重复搜索
vis[0][0]=0,vis[0][1]=0;
dfs(0,0,1);
if(!flag)//用flag来判断最终是否走完全图
{
cout<<"Scenario #"<<++ans<<":"<<endl;
cout<<"impossible"<<endl<<endl;
}
}
return 0;
}
hdu2488 dfs的更多相关文章
- BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 1280 MBSubmit: 3127 Solved: 795[Submit][Status][Discu ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]
4196: [Noi2015]软件包管理器 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1352 Solved: 780[Submit][Stat ...
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- POJ_2386 Lake Counting (dfs 错了一个负号找了一上午)
来之不易的2017第一发ac http://poj.org/problem?id=2386 Lake Counting Time Limit: 1000MS Memory Limit: 65536 ...
- 深度优先搜索(DFS)
[算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-1146】网络管理Network DFS序 + 带修主席树
1146: [CTSC2008]网络管理Network Time Limit: 50 Sec Memory Limit: 162 MBSubmit: 3495 Solved: 1032[Submi ...
随机推荐
- GitHub 相关内容
1. Git是分布式版本控制系统 集中式版本控制系统:版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中 ...
- memcached学习笔记——存储命令源码分析上篇
原创文章,转载请标明,谢谢. 上一篇分析过memcached的连接模型,了解memcached是如何高效处理客户端连接,这一篇分析memcached源码中的process_update_command ...
- HTML5 中 div section article 的区别
刚刚开始接触 HTML5 时,对它的标签很不适应,甚至一度有点反感.尤其是对 div.section.article 这几个标签,实在弄不清楚应该使用在什么场合下. div HTML Spec: Th ...
- 单线程Singleton模式的几个要点
1.Singleton模式中的实例构造器可以设置为protected以允许子类派生.2.Singleton模式一般不要支持ICIoneable接口,因为这可能会导致多个对象实例,与Singleton模 ...
- TortoiseGit 使用教程
原文地址:http://blog.csdn.net/ethan_xue/article/details/7749639 git的使用越来越广泛 使用命令比较麻烦,下面讲解一下tortoisegit的使 ...
- 初识前端HTML
HTML 超文本标记语言 HTML的解析 顾名思义,HTML就是由一个个的标签组成的,组成后,HTML可被浏览器直接识别以及处理成我们想给用户展示的样子. 下面我们就来解析HTML的一个个标签. &l ...
- JSP简单练习-数组应用实例
<%@ page contentType="text/html; charset=gb2312" %> <html> <body> <% ...
- How to face setbacks
I’ve been in a bad mood since I started on the American Accent. I became even more upset when I adde ...
- HDU 4760 Good FireWall 完好Trie题解
本题乍看像是线段树之类的区间操作,只是由于仅仅是须要查找ip的前缀,故此事实上是使用Trie来做. 挺高难度的Trie应用,做完这道题之后说明Trie功力有一定火候了. 这里的Trie使用到了Dele ...
- Linux环境下Eclipse + Tomcat + MySQL 配置J2EE开发环境的方法
1. 版本号信息 (1)CentOS 6.4发行版64位,uname -a 显演示样例如以下: Linux localhost.localdomain 3.11.6 #1 SMP Sat Nov 2 ...