正式做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的更多相关文章

  1. POJ-3009 Curling 2.0 (DFS)

    Description On Planet MM-21, after their Olympic games this year, curling is getting popular. But th ...

  2. POJ3009——Curling 2.0(DFS)

    Curling 2.0 DescriptionOn Planet MM-21, after their Olympic games this year, curling is getting popu ...

  3. poj3009 Curling 2.0 (DFS按直线算步骤)

    Curling 2.0 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14563   Accepted: 6080 Desc ...

  4. poj3009 Curling 2.0(很好的题 DFS)

    https://vjudge.net/problem/POJ-3009 做完这道题,感觉自己对dfs的理解应该又深刻了. 1.一般来说最小步数都用bfs求,但是这题因为状态记录很麻烦,所以可以用dfs ...

  5. POJ3009 Curling 2.0(DFS)

    迷宫问题求最短路. 略有不同的是假设不碰到石头的话会沿着一个方向一直前进,出界就算输了.碰到石头,前方石头会消失,冰壶停在原地. 把这个当作状态的转移. DFS能够求出其最小操作数. #include ...

  6. poj3009 Curling 2.0 深搜

    PS:以前看到题目这么长就没写下去了.今天做了半天,没做出来.准备看题解,打开了网站都忍住了,最后还是靠自己做出来的.算是一点进步吧. 分析: 题目的意思没明白或者理解有偏差都没办法做题.看样例3和样 ...

  7. POJ3009 Curling 2.0(DFS)

    题目链接. 分析: 本题BFS A不了. 00100 00001 01020 00000 00010 00010 00010 00010 00030 对于这样的数据,本来应当是 5 步,但bfs却 4 ...

  8. 【POJ - 3009】Curling 2.0 (dfs+回溯)

    -->Curling 2.0 直接上中文 Descriptions: 今年的奥运会之后,在行星mm-21上冰壶越来越受欢迎.但是规则和我们的有点不同.这个游戏是在一个冰游戏板上玩的,上面有一个正 ...

  9. 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 ...

随机推荐

  1. 面向站长和网站管理员的Web缓存加速指南

    详细了解HTTP缓存控制及为什么要缓存. 英文版: http://www.mnot.net/cache_docs/ 中文版:http://www.chedong.com/tech/cache_docs ...

  2. protel DXP的类矢量图功能

    一.概述 在写论文的过程中,我们经常需要将protel DXP上的原理图贴入到WORD中.我们可以选择使用截图工具,然后再导入到WORD中.但是由于普通截图图形文件都是位图文件,当我们将图形文件导入W ...

  3. UML_时序图画法

    UML建模之时序图(Sequence Diagram) 一.时序图简介(Brief introduction) 二.时序图元素(Sequence Diagram Elements) 角色(Actor) ...

  4. 什么是UI控件

    凡是带有Widget参数的组件都是控件.

  5. mysql的错误:The server quit without updating PID file /usr/local/mysql/data/door.pid).

    mysql错误解决: 先 参考:http://www.jb51.net/article/48625.htm 参考第四条: mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打 ...

  6. zoj 3757&&3758

    3757一个模拟题,简单,但容易错: 3758 大素数判定就行: #include<cstdio> #include<cstring> #include<algorith ...

  7. Android之监测手机网络状态的广播

    Android之监测手机网络状态的广播 Android 监控网络状态 Android利用广播监听设备网络连接(断网)的变化情况

  8. 如何登录mysql? cmd怎么连接mysql数据库

    Mysql开源数据库,任何人都可以下载安装使用.那么安装好的mysql如何登陆连接mysql数据库呢? 连接mysql数据库的几种方法 一 Mysql命令行连接 一般对于刚刚安装好的mysql,如果勾 ...

  9. [状压dp]HDOJ1565 方格取数(1)

    中文题~~ 题意略 $n\le 20$ ! 很明显是状压! #include <cstdio> #include <cstdlib> #include <cstring& ...

  10. easyui源码翻译1.32--Dialog(对话框窗口)

    前言 扩展自$.fn.window.defaults.使用$.fn.dialog.defaults重写默认值对象.下载该插件翻译源码 该对话框是一种特殊类型的窗口,它在顶部有一个工具栏,在底部有一个按 ...