博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3009 Curling 2.0
阅读量:5164 次
发布时间:2019-06-13

本文共 2351 字,大约阅读时间需要 7 分钟。

题目大意:

  一冰壶在board上运动,会沿着原来的方向一直运动,直到遇到障碍物。此时冰壶停下,障碍物消失,你重新给冰壶指定一个方向,冰壶继续运动,直到达到终点。求你给方向的次数。

要点:

     1.运动时碰到障碍物才会停下,如果它周围都是障碍物,就没法运动。

   2.题目要求次数必须小于等于10,超过则认为不能到达

代码如下:

1 #include 
2 #include
3 #include
4 #define max_ans 15 5 int dir[][2] = {
{
0,1}, {
0,-1},{-1,0},{
1,0}}; 6 int w, h; 7 int sx, sy; 8 9 char board[22][22];10 int ans;11 12 13 void dfs(int x, int y, int step) {14 if(step > 10) {15 return;16 }17 if(board[x][y] == 3) {18 if(step < ans) {19 ans = step;20 }21 return;22 }23 for(int i = 0; i < 4; i++) {24 int tpx = x;25 int tpy = y;26 while(tpx >= 0 && tpy >= 0 && tpx < h && tpy < w && (board[tpx][tpy] == 0 || board[tpx][tpy] == 2)) {27 tpx = tpx + dir[i][0];28 tpy = tpy + dir[i][1];29 }30 31 if(tpx >= 0 && tpy >= 0 && tpx < h && tpy < w) {32 if(board[tpx][tpy] == 3) {33 if(step < ans) {34 ans = step;35 }36 continue;37 }38 else {39 int tx = tpx - dir[i][0];40 int ty = tpy - dir[i][1];41 42 if(tx != x || ty != y) {43 if(board[tpx][tpy] == 1) {44 board[tpx][tpy] = 0;45 dfs(tx, ty, step+1);46 board[tpx][tpy] = 1;47 } 48 }49 }50 }51 52 53 }54 }55 int main(int argc, char const *argv[])56 {57 //freopen("input.txt","r",stdin);58 while(scanf("%d %d",&w, &h) != EOF && (w != 0 && h != 0)) {59 60 for(int i = 0; i < h; i++) {61 for(int j = 0; j < w; j++) {62 scanf("%d",&board[i][j]);63 if(board[i][j] == 2) {64 sx = i;65 sy = j;66 }67 }68 }69 ans = max_ans;70 dfs(sx, sy, 1);71 if(ans == max_ans) {72 puts("-1");73 }74 else {75 printf("%d\n",ans);76 }77 }78 return 0;79 }

这道题我提交了很多次,尤其是31 行到46行,必须把逻辑搞清楚,不然很容易错。

转载于:https://www.cnblogs.com/jasonJie/p/5801961.html

你可能感兴趣的文章
Nginx服务编译安装、日志功能、状态模块及访问认证模式实操
查看>>
2017-3-24 开通博客园
查看>>
【MySQL性能优化】MySQL常见SQL错误用法
查看>>
python学习手册笔记——25.OOP宏伟蓝图
查看>>
3.6 字符串
查看>>
Vue2全家桶之一:vue-cli(vue脚手架)超详细教程
查看>>
smarty模板(转载)
查看>>
四年多没碰C++了。。。
查看>>
nginx负载均衡 ->Tomcat8集群 -> sentinel集群 -> redis3主从
查看>>
Tomato的init启动流程分析(原创)
查看>>
java中static使用之静态方法注意点
查看>>
方格取数
查看>>
用Darwin和live555实现的直播框架
查看>>
Struts 2 常用技术
查看>>
core文件
查看>>
单向链表
查看>>
O2耳放 DIY 模拟放大
查看>>
Linux 下源码编译安装 vim 8.1
查看>>
【C++】三大概念要分清--重载,隐藏(重定义,覆盖(重写)
查看>>
Condition原理以及使用
查看>>