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 ...
随机推荐
- office 问题集
----20131012---------------------------------------------------------------------------------------- ...
- mysql(转)
/* 启动MySQL */net start mysql /* 连接与断开服务器 */mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */mysqld ...
- 【git】切换分支获取代码
Welcome to Git (version 1.9.5-preview20150319) Run 'git help git' to display the help index.Run 'git ...
- 【@ContextConfiguration】java世界的那些注解
@ContextConfiguration Spring整合JUnit4测试时,使用注解引入多个配置文件 单个文件 @ContextConfiguration(Locations="../a ...
- python 下载安装及setuptools应用
1.首先下载python安装程序,下载地址:https://www.python.org/download/releases/2.7.8/ 如下图: 因为我的机器是32位的就选择了Windows x8 ...
- JAVA 字符串编码总结
java 为了解决跨平台,字符串编码的有点特殊 String newStr = new String(oldStr.getBytes(), "UTF-8");java中的Strin ...
- javaweb学习总结(二十八)——JSTL标签库之核心标签
一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心 ...
- ANDROID_MARS学习笔记_S01原始版_009_下载文件
一.代码1.xml(1)main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...
- OLEDB和ODBC的区别(优缺点)
ODBC是一种连接数据库的开放标准,OLEDB(对象链接和嵌入数据库)位于ODBC层与应用程序之间. 在你的ASP页面里,ADO是位于OLEDB之上的应用程序. 你的ADO调用先被送到OLEDB,然后 ...
- 【HDOJ】1050 Moving Tables
贪心问题,其实我觉得贪心就是合理的考虑最优情况,证明贪心可行即可.这题目没话多久一次ac.这道题需要注意房间号的奇偶性.1 3.2 4的测试数据.答案应该为20. #include <stdio ...