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 ...
随机推荐
- MVC-内容详情页显示内容
@model InfoDataProvider.DataModel.FAQ_ContentUser 内容Content字段:如果里面有html标签. @Html.DisplayFor(p => ...
- unity3d 使用背景贴图
使用贴图代替天空盒作为背景,参照:http://www.narkii.com/club/thread-261840-1.html 看看我做的:
- 拖尾渲染器 Trail Renderer
拖尾渲染器(Trail Renderer)用于制作跟在场景中的物体后面的拖尾效果来代表它们在到处移动. 必须给Materials一个材质渲染器设置的Colors才有效. 展示自己的一个demo...
- 重置mysql密码
如何修改mysql root密码 忘记MySQL ROOT密码是在MySQ使用中很常见的问题,可是有很多朋友并不会重置ROOT密码,那叫苦啊,特写此文章与大家交流: 1.编辑MySQL的配置文件:my ...
- windows store app search contract
代码如下: html: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...
- zepto源码学习-04 event
之前说完$(XXX),然后还有很多零零碎碎的东西需要去分析,结果一看代码,发现zepto的实现都相对简单,没有太多可分析的.直接略过了一些实现,直接研究Event模块,相比JQuery的事件系统,ze ...
- JDBC MySQL字段类型为datetime的数据取出(util.Date)
使用ResultSet的getTimestamp方法获取java.util.Date型数据 java.util.Date time = rs.getTimestamp("time" ...
- 禁用nginx的access日志
修改nginx.conf 找到access_log: access_log /dev/null; 或者access_log off
- CDQ分治题目小结
CDQ分治属于比较特殊的一类分治,许多问题转化为这类分治的时候,时空方面都会有很大节省,而且写起来没有这么麻烦. 这类分治的特殊性在于分治的左右两部分的合并,作用两部分在合并的时候作用是不同的,比如, ...
- MyBatis学习总结1
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用 ...