【POJ 3009 Curling2.0 迷宫寻径 DFS】
http://poj.org/problem?id=3009
模拟冰壶的移动,给出到达终点的最少投掷次数(不可达时为-1)。
具体移动规则如下:
每次选四个方向之一,沿此方向一直前进,直到撞到block或出界或抵达目标位置。
如果撞到block,冰壶停在block的前一个位置,block消失,此时可改变冰壶的移动方向(重新投掷一次);
如果出界,则这条移动路径以失败结束;
如果抵达目标位置,则记录这条移动路径一共投掷的次数。
投掷次数不超过10次的为成功路径。
如果存在成功路径,输出最少的投掷次数;不存在则输出-1。
代码如下,由于数据量小,可用DFS得到所有解然后取最小值;注意回溯时还原修改过的block:
#include <cstdio>
#include <cstring>
using namespace std; const int MAX_N = ; int n, m;
int G[MAX_N][MAX_N];
int dx[]={, , ,-}, dy[]={, -, , };
int sx, sy, gx, gy;
int min_ans; bool inside(int x, int y){
if(x< || x>=n || y< || y>=m) return false;
return true;
} void dfs(int x, int y, int cnt){
if(cnt > ) return ;
for(int i=; i<; i++){
int nx = x + dx[i];
int ny = y + dy[i];
if(!inside(x, y)) continue; //出界
if(G[nx][ny] == ) continue; //block
else{
while(inside(nx, ny) && G[nx][ny] != && G[nx][ny] != ){
nx += dx[i];
ny += dy[i]; //沿此方向走到block为止
}
if(!inside(nx, ny)) continue; //此方向最终出界
if(G[nx][ny] == ){
min_ans = cnt<min_ans ? cnt : min_ans;
continue; //此方向中途命中
} G[nx][ny] = ; //block消失
nx -= dx[i];
ny -= dy[i]; //抵达此方向最后一个合法位置,block的前一个
//printf("%d %d\n", dx[i], dy[i]);
dfs(nx, ny, cnt+);
nx += dx[i];
ny += dy[i];
G[nx][ny] = ; //还原,回溯
}
}
return ;
} int main()
{
freopen("3009.txt", "r", stdin);
while(scanf("%d%d", &m, &n) != EOF){
if(m== && n==) break;
for(int i=; i<n; i++){
for(int j=; j<m; j++){
scanf("%d", &G[i][j]);
if(G[i][j] == ){
sx = i;
sy = j;
}else if(G[i][j] == ){
gx = i;
gy = j;
}
}
} min_ans = ; //任意大于10的值
dfs(sx, sy, ); //投掷第一次
if(min_ans > ) min_ans = -;
printf("%d\n", min_ans);
}
return ;
}
注意记这一类搜索的框架,以及联系算法课学过的回溯法的基本概念,如约束条件、活结点等。
【POJ 3009 Curling2.0 迷宫寻径 DFS】的更多相关文章
- POJ 3009 Curling 2.0【带回溯DFS】
POJ 3009 题意: 给出一个w*h的地图,其中0代表空地,1代表障碍物,2代表起点,3代表终点,每次行动可以走多个方格,每次只能向附近一格不是障碍物的方向行动,直到碰到障碍物才停下来,此时障碍物 ...
- 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 推箱子
Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14090 Accepted: 5887 Desc ...
- 2021.08.16 P1363 幻象迷宫(dfs,我感受到了出题人浓浓的恶意)
2021.08.16 P1363 幻象迷宫(dfs,我感受到了出题人浓浓的恶意) P1363 幻象迷宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 幻象迷宫可以认为是无限 ...
- POJ 1979 Red and Black【DFS】
标准DFS,统计遍历过程中遇到的黑点个数 #include<cstdio> #include<vector> #include<queue> #include< ...
- poj 1724 ROADS 很水的dfs
题意:给你N个城市和M条路和K块钱,每条路有话费,问你从1走到N的在K块钱内所能走的最短距离是多少 链接:http://poj.org/problem?id=1724 直接dfs搜一遍就是 代码: # ...
- POJ 1745 【0/1 背包】
题目链接:http://poj.org/problem?id=1745 Divisibility Time Limit: 1000MS Memory Limit: 10000K Total Sub ...
- POJ 3009 Curling 2.0(DFS + 模拟)
题目链接:http://poj.org/problem?id=3009 题意: 题目很复杂,直接抽象化解释了.给你一个w * h的矩形格子,其中有包含一个数字“2”和一个数字“3”,剩下的格子由“0” ...
- POJ 3009 Curling 2.0 回溯,dfs 难度:0
http://poj.org/problem?id=3009 如果目前起点紧挨着终点,可以直接向终点滚(终点不算障碍) #include <cstdio> #include <cst ...
随机推荐
- 场景示例 Nginx 访问日志
http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr [$ti ...
- (?:pattern) (?=pattern) (?!pattern)
(pattern) 匹配 pattern 并获取这一匹配.所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0- ...
- C#中Split分隔字符串的应用(C#、split、分隔、字符串)
转载地址 .用字符串分隔: using System.Text.RegularExpressions; string str="aaajsbbbjsccc"; string[] s ...
- bzoj1643 [Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪
Description 农夫约翰已经从他的牧场中取得了数不清块数的正方形草皮,草皮的边长总是整数(有时农夫约翰割草皮的刀法不合适,甚至切出了边长为0的正方形草皮),他已经把草皮放在了一个奶牛贝茜已经知 ...
- python刷取CSDN博文访问量之三
python刷取CSDN博文访问量之三 作者:vpoet 注:这个系列我只贴代码,代码不注释.有兴趣的自己读读就懂了,纯属娱乐,望管理员抬手若有转载一定不要注明来源 #coding=utf-8 i ...
- 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活
图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) by zhangxinxu from http://www.zhangxinxu.com 本 ...
- Unity3d修炼之路:载入一个预制体,然后为该对象加入组件,然后查找对象,得到组件。
#pragma strict function Awake(){ //载入一个预制体 资源必须在 Resources目录下 Resources.LoadLoad(); //载入后 必须演示样例化 Ga ...
- 那么温暖http合约,入门。
简介 年提出.经过几年的使用与发展,得到不断地完好和扩展.眼下在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,并且HTTP-NG(Next Generation ...
- MP3/WAV 播放
一.编译libmad 1.先下载压缩包到本地,并解压 tar -xvzf libmad-0.15.1b.tar.gz -C ./ 2.进入源代码文件夹并配置 编写一个配置文件,便于< ...
- 关于Oracle SQL/82标准和SQL/92标准
在ORACLE9i之前,oracle语法基础是SQL/86标准,9i及之后的版本中支持SQL/92标准.基表信息:products.purchases和product_types SQL> se ...