POJ3009 Curling 2.0
正式做POJ的第一题,做出来后又看了别人的代码,就又完善了一下,也通过了。参考 http://blog.sina.com.cn/s/blog_4abcd9bc0100phzb.html
改了之后觉得写得比他好,呵呵。
#include <iostream>
#include <stdlib.h> using namespace std; #define MAX_W 20
#define MAX_H 20 int s_x;
int s_y;
int w;
int h;
char board[MAX_H+][MAX_W+]; //留边,省得越界检查
int res; int dx[]={,,,-};
int dy[]={,-,,}; void read(void);
void dfs(int x,int y,int time); int main(void)
{
while(scanf("%d%d",&w,&h),w)
{
res=;
getchar(); //残留的换行符
read();
dfs(s_x,s_y,);
printf("%d\n",res==?-:res);
}
return ;
} void read(void)
{
int i,j;
for(i=;i<=h+;i++)
{
for(j=;j<=w+;j++)
{
if(i== || j== || i==h+ || j==w+)
{
board[i][j]=; //清边,防止影响下一轮判断
continue;
} board[i][j]=getchar();
getchar();
if(board[i][j]=='')
{
s_x=i;
s_y=j;
}
}
}
} //从该点寻找终点
//time是已经扔石头的次数
void dfs(int x,int y,int time)
{
int i; if(time>=) return; for(i=;i<;i++)
{
int nx=x;
int ny=y;
if(board[x+dx[i]][y+dy[i]]=='') //方块阻挡则换方向
continue; while() //在该方向滑行
{
nx+=dx[i],ny+=dy[i];
if(nx<= || ny<= ||nx>h || ny>w) //滑出,换下一方向
break;
else if(board[nx][ny]=='')
{
//停下,消失方块,完成该方向,恢复方块,进行下一方向
board[nx][ny]='';
dfs(nx-dx[i],ny-dy[i],time+);
board[nx][ny]='';
break;
}
else if(board[nx][ny]=='') //成功,不用尝试其他方向
{ //因为其它方向一定步骤更多
res=__min(res,time+);
return;
} }
}
}
Curling.cpp
POJ3009 Curling 2.0的更多相关文章
- POJ-3009 Curling 2.0 (DFS)
Description On Planet MM-21, after their Olympic games this year, curling is getting popular. But th ...
- POJ3009——Curling 2.0(DFS)
Curling 2.0 DescriptionOn Planet MM-21, after their Olympic games this year, curling is getting popu ...
- poj3009 Curling 2.0 (DFS按直线算步骤)
Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14563 Accepted: 6080 Desc ...
- poj3009 Curling 2.0(很好的题 DFS)
https://vjudge.net/problem/POJ-3009 做完这道题,感觉自己对dfs的理解应该又深刻了. 1.一般来说最小步数都用bfs求,但是这题因为状态记录很麻烦,所以可以用dfs ...
- POJ3009 Curling 2.0(DFS)
迷宫问题求最短路. 略有不同的是假设不碰到石头的话会沿着一个方向一直前进,出界就算输了.碰到石头,前方石头会消失,冰壶停在原地. 把这个当作状态的转移. DFS能够求出其最小操作数. #include ...
- poj3009 Curling 2.0 深搜
PS:以前看到题目这么长就没写下去了.今天做了半天,没做出来.准备看题解,打开了网站都忍住了,最后还是靠自己做出来的.算是一点进步吧. 分析: 题目的意思没明白或者理解有偏差都没办法做题.看样例3和样 ...
- POJ3009 Curling 2.0(DFS)
题目链接. 分析: 本题BFS A不了. 00100 00001 01020 00000 00010 00010 00010 00010 00030 对于这样的数据,本来应当是 5 步,但bfs却 4 ...
- 【POJ - 3009】Curling 2.0 (dfs+回溯)
-->Curling 2.0 直接上中文 Descriptions: 今年的奥运会之后,在行星mm-21上冰壶越来越受欢迎.但是规则和我们的有点不同.这个游戏是在一个冰游戏板上玩的,上面有一个正 ...
- Curling 2.0 分类: 搜索 2015-08-09 11:14 3人阅读 评论(0) 收藏
Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14289 Accepted: 5962 Descript ...
随机推荐
- 【git】切换分支获取代码
Welcome to Git (version 1.9.5-preview20150319) Run 'git help git' to display the help index.Run 'git ...
- Google Code Jam 2014 Qualification 题解
拿下 ABD, 顺利晋级, 预赛的时候C没有仔细想,推荐C题,一个非常不错的构造题目! A Magic Trick 简单的题目来取得集合的交并 1: #include <iostream> ...
- TOKEN+签名验证
TOKEN+签名验证 首先问大家一个问题,你在写开放的API接口时是如何保证数据的安全性的?先来看看有哪些安全性问题在开放的api接口中,我们通过http Post或者Get方式请求服务器的时候,会面 ...
- Unity3d 调用C++的DLL
原地址:http://www.cnblogs.com/alongu3d/archive/2013/04/20/3031904.html Unity 3D 调用DLL的方法 本文转载:渡蓝的博客园 ht ...
- UPUPW PHP环境集成包
UPUPW PHP环境集成包 http://www.upupw.net/
- 日志分析-Web
http://my.oschina.net/chenguang/blog/376267 http://my.oschina.net/chenguang/blog/371275 http://my.os ...
- eclipse+tomcat7解决项目中文乱码的一个思路
1. 在代码层面进行编码的修改操作,参考博文的方法一:http://www.cnblogs.com/longshiyVip/p/4873058.html 2. 如果项目使用了struts2等前端框架, ...
- java程序执行时,JVM内存
高淇 java 31集 类代码,static,常量池到方法区 (常量池会在类之间共享) 局部变量 到栈 对象到 堆 高淇 32集 增加一个computer类
- SQL Server 行列转换
/* 标题:普通行列转换(version 2.0) 作者:范中磊 说明:普通行列转换(version 1.0)仅针对sql server 2000提供静态和动态写法,version 2.0增加sql ...
- Ember.js demo8
<!DOCTYPE html> <html> <head> <meta name="description" content=" ...