POJ3009 Curling 2.0
原题链接:http://poj.org/problem?id=3009
暴力DFS + 回溯。注意行和列不要搞反,并且当搜索深度大于10的时候直接返回。
1 #include <stdio.h> 2 #include <string.h> 3 4 int r, c, ans; 5 int g[25][25]; 6 7 inline int min(int x, int y){return x < y ? x : y;} 8 9 int checkup(int x, int y) 10 { 11 if(y - 1 > 0 && g[y - 1][x] == 1) 12 return 0; 13 int i; 14 for(i = y - 1; i > 0; i --) 15 { 16 if(g[i][x] == 3) 17 return -1; 18 if(g[i][x] == 1) 19 { 20 g[i][x] = 0; 21 return i + 1; 22 } 23 } 24 return 0; 25 } 26 27 int checkdown(int x, int y) 28 { 29 if(y + 1 <= r && g[y + 1][x] == 1) 30 return 0; 31 int i; 32 for(i = y + 1; i <= r; i ++) 33 { 34 if(g[i][x] == 3) 35 return -1; 36 if(g[i][x] == 1) 37 { 38 g[i][x] = 0; 39 return i - 1; 40 } 41 } 42 return 0; 43 } 44 45 int checkleft(int x, int y) 46 { 47 if(x - 1 > 0 && g[y][x - 1] == 1) 48 return 0; 49 int i; 50 for(i = x - 1; i > 0; i --) 51 { 52 if(g[y][i] == 3) 53 return -1; 54 if(g[y][i] == 1) 55 { 56 g[y][i] = 0; 57 return i + 1; 58 } 59 } 60 return 0; 61 } 62 63 int checkright(int x, int y) 64 { 65 if(x + 1 <= c && g[y][x + 1] == 1) 66 return 0; 67 int i; 68 for(i = x + 1; i <= c; i ++) 69 { 70 if(g[y][i] == 3) 71 return -1; 72 if(g[y][i] == 1) 73 { 74 g[y][i] = 0; 75 return i - 1; 76 } 77 } 78 return 0; 79 } 80 81 void dfs(int cx, int cy, int d) 82 { 83 if(d >= 10) 84 return ; 85 int up = checkup(cx, cy); 86 if(up == -1) 87 { 88 ans = (ans == -1 ? d + 1 : min(ans, d + 1)); 89 return ; 90 } 91 else if(up != 0) 92 { 93 dfs(cx, up, d + 1); 94 g[up - 1][cx] = 1; 95 } 96 97 int down = checkdown(cx, cy); 98 if(down == -1) 99 { 100 ans = (ans == -1 ? d + 1 : min(ans, d + 1)); 101 return ; 102 } 103 else if(down != 0) 104 { 105 dfs(cx, down, d + 1); 106 g[down + 1][cx] = 1; 107 } 108 109 int left = checkleft(cx, cy); 110 if(left == -1) 111 { 112 ans = (ans == -1 ? d + 1 : min(ans, d + 1)); 113 return ; 114 } 115 else if(left != 0) 116 { 117 dfs(left, cy, d + 1); 118 g[cy][left - 1] = 1; 119 } 120 121 int right = checkright(cx, cy); 122 if(right == -1) 123 { 124 ans = (ans == -1 ? d + 1 : min(ans, d + 1)); 125 return ; 126 } 127 else if(right != 0) 128 { 129 dfs(right, cy, d + 1); 130 g[cy][right + 1] = 1; 131 } 132 } 133 134 int main() 135 { 136 int i, j, sx, sy; 137 while(scanf("%d%d", &c, &r), r + c) 138 { 139 for(i = 1; i <= r; i ++) 140 { 141 for(j = 1; j <= c; j ++) 142 { 143 scanf("%d", &g[i][j]); 144 if(g[i][j] == 2) 145 sx = j, sy = i; 146 } 147 } 148 ans = -1; 149 dfs(sx, sy, 0); 150 printf("%d\n", ans); 151 } 152 return 0; 153 }
转载于:https://www.cnblogs.com/huangfeihome/archive/2012/10/16/2726776.html
POJ3009 Curling 2.0相关推荐
- poj3009 Curling 2.0 深搜
PS:以前看到题目这么长就没写下去了.今天做了半天,没做出来.准备看题解,打开了网站都忍住了,最后还是靠自己做出来的.算是一点进步吧. 分析: 题目的意思没明白或者理解有偏差都没办法做题.看样例3和样 ...
- 【暑假复习】【搜索】POJ3009:Curling 2.0
题意 给出一个图,有石头和空地,有一个球,可以向上下左右任意一个没有相邻石头的方向持续移动,直到撞到石头为止(球停留在石头的前一格),并且会使撞到的石头消失,求让球到达目的地最少的步数(不一定非要在终 ...
- POJ 3009 Curling 2.0(深度优先搜索+剪枝)
POJ 3009 Curling 2.0 题目大意: 在一块光滑的h*w的矩形平面上,有若干个障碍物,用1表示以及空格用0表示.现在有一个小球在平面上的数字2的地方,通过抛掷这个小球,使其达到数字3 ...
- Curling 2.0{
题目 Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22417 Accepted: 9100 D ...
- poj 3009 Curling 2.0
题目链接:点击打开链接 Description On Planet MM-21, after their Olympic games this year, curling is getting pop ...
- POJ 3009 Curling 2.0 {深度优先搜索}
原题 $On Planet MM-21, after their Olympic games this year, curling is getting popular. But the rules ...
- POJ 3009 Curling 2.0(简单DFS)
题意: 每一次碰到障碍则在障碍的旁边停下来,并且障碍被击碎.此时可以重新值掷一次冰球.当掷球次数超过 10 次则输出 -1. 思路: 1. 超过 10 次输出 -1 这个剪枝很关键: 2. 主要是要注 ...
- poj 3009 Curling 2.0 (dfs的应用)
http://poj.org/problem?id=3009 (1)这是一个用球撞石头的游戏,撞到石头,石碎球停.在规定的10次抛球机会下,若求移动到终点就赢,否则算输了(出界直接算输). (2)每一 ...
- POJ Curling 2.0
题目 题目真的长,还有很多细节. #include <iostream> #include <string> using namespace std;struct Coordi ...
最新文章
- java怎么修改fxml,JavaFX FXML修改列表
- jquery地址栏链接与a标签链接匹配添加样式!
- 云炬Android开发笔记 12基于WebView的混合App框架设计(包含浏览器与原生请求Cookie的处理)
- 【机器学习基础】前置知识(一):数学符号及希腊字母
- 我们在tool里给ui element设置断点,然后操作的时候,断点就触发了。Framework是咋实现的
- 如何维持手机电池寿命_延长手机电池寿命终极技巧教学,iPhone和安卓手机皆适合...
- php root权限执行命令,如何使用PHP执行需要root权限的系统命令
- 进程和线程的区别, 面相对象补充, 进程, 数据共享, 锁, 进程池, 爬虫模块(requests, bs4(beautifulsoup))...
- 数据挖掘:数据清洗——异常值处理
- 第一章 .NET基础-C#基础
- windows与linux多线程对比
- 阿里面试官:分别说说微信和淘宝扫码登录背后的实现原理?
- oracle dbf文件迁移,Oracle安装盘空间不足,对.DBF文件进行迁移
- QQ个性装扮气泡免费使用
- vue手动封装分页组件
- PS2018学习笔记(19-24节)
- SpringBoot+Mybatis+Mysql+Vue+ElementUi实现一个《流浪猫狗领养救助管理系统》毕业设计(超详细教程)
- StarlingX分布式云部署(抢鲜)
- 小程序 多张图片上传(源码分享+实现分析)
- 西安航天民芯电子 推出原厂原装MT36291 SOT23-6 PIN对PIN兼替FP6291LR-G1 MT3608
热门文章
- 【cJson】JSON的基本概念
- php 安装 phpunit,phpunit的安装
- linux课程_linux系统使用课程更新提示
- DM8 jdbc调用存储过程传参list<实体类>
- 让VC程序在Win7下获得管理员权限
- Pixhawk之姿态解算篇(2)_mahony算法分析
- php 正则获取某个div,php正则匹配html中带class的div并选取其中内容的方法
- pytorch 之 冻结某层参数,即训练时不更新
- c++ 模板教程(c语言中文网) 自己运行实例
- linux diff命令_Linux diff命令示例