poj3009——Curling 2.0
来源:互联网 发布:vba 数组赋值 编辑:程序博客网 时间:2024/06/06 12:56
题目大意:在有一些障碍的球场打冰球,只能向前后左右扔(不能扔对角线),球会一直按所扔方向走直到撞墙,撞墙时球停在墙的前一个格子处,并且墙消失,问最少需要扔多少次能让球从起始S走到目标G,次数不能超过10次,否则失败
输入:(可以有不超过100个的case,一个case即一个数据集,输入以0 0结束)
第i个case的球场宽度w 高度h( 2 <= w <= 20, 1 <= h <= 20.)
第i个case种第j行球场的布局情况(0代表空地 1代表障碍物 2代表S 3代表G)
输出:第i个case的最小扔球次数(如果失败无解则输出-1)
分析:dfs搜索
球扔出去三种情况:到了G;撞了墙;直接扔出了球场
注意在撞墙消除障碍物dfs之后要还原障碍物和步数
代码:转载自http://blog.csdn.net/fanxing1/article/details/6310037
- #include<stdio.h>
- int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
- int ei,ej;
- int map[25][25];
- int w,h,steps,min;
- #define MAX 99999999
- void dfs(int si,int sj)
- {
- int i,pi,pj;
- if(steps>=10) return ;
- for(i=0;i<4;i++)
- {
- pi=si,pj=sj;
- while(1) //越界或到达G或撞墙这三种情况满足一个就得退出while循环,因为不能再接着沿着这个方向走了
- {
- pi+=dir[i][0];
- pj+=dir[i][1];
- if(pi<=0||pi>h||pj<=0||pj>w) break;//如果越界,选择其他方向
- if(pi==ei&&pj==ej)
- {
- steps++;
- if(min>steps) min=steps;
- steps--;
- return;
- }
- else if(map[pi][pj]==1)//如果遇到障碍物
- {
- if(pi-dir[i][0]!=si||pj-dir[i][1]!=sj)//如果不是本次dfs的起点
- {
- map[pi][pj]=0;//消除障碍物
- steps++;//前进一步
- dfs(pi-dir[i][0],pj-dir[i][1]);//递归查找该点到终点的最小步数
- map[pi][pj]=1;//还原障碍物
- steps--;//还原步数
- }
- break;
- }
- }
- }
- }
- int main()
- {
- int si,sj,i,j;
- while(scanf("%d%d",&w,&h)==2&&(w||h))
- {
- for(i=1;i<=h;i++)//输入并找到起点和终点
- for(j=1;j<=w;j++)
- {
- scanf("%d",&map[i][j]);
- if(map[i][j]==2)
- si=i,sj=j;
- else if(map[i][j]==3)
- ei=i,ej=j;
- }
- min=MAX;//记录最小步数
- steps=0;//初始化步数
- dfs(si,sj);//深搜
- if(min==MAX) puts("-1");
- else printf("%d/n",min);
- }
- return 0;
- }
阅读全文
0 0
- poj3009——Curling 2.0
- 【poj3009】curling 2.0——dfs
- DFS&模拟—POJ3009-Curling 2.0 if的用法区别
- POJ3009:Curling 2.0(DFS)
- POJ3009--Curling 2.0
- poj3009 Curling 2.0
- poj3009 Curling 2.0---bfs
- poj3009 Curling 2.0
- poj3009 Curling 2.0
- POJ3009 Curling 2.0(DFS)
- POJ3009 Curling 2.0
- POJ3009---Curling 2.0
- POJ3009 Curling 2.0
- POJ3009 Curling 2.0 DFS
- POJ3009 Curling 2.0【DFS】
- poj3009 Curling 2.0
- POJ3009 Curling 2.0(DFS)
- POJ3009-Curling 2.0
- H264 编码+打包+解码相关知识
- 友盟消息推送 3.x.x 的获取不到设备token问题 s=-11,s1=accs bindapp error
- es6详解
- 病毒木马查杀实战第018篇:病毒特征码查杀之基本原理
- springboot之全局异常
- poj3009——Curling 2.0
- Terrorists UVALive
- hdu3829-Cat VS Dog(最大独立集,匹配问题)
- sed
- Vue学习日志:Vue实例(2)
- angularjs中的filter(过滤器)——格式化日期的date
- com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class org.apache.ibati
- 使用PullToRefresh实现下拉刷新和上拉加载
- Mac小技巧之Sierra系统中安全性与隐私中没有"任何来源"选项