博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ-3009 Curling 2.0---DFS求最短路
阅读量:5761 次
发布时间:2019-06-18

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

题目链接:

题目大意:

问题:打冰球。冰球可以往上下左右4个方向走,只有当冰球撞到墙时才会停下来,而墙会消失。当冰球紧贴墙时,不能将冰球往那个方向打。冰球出界就当输,超过10次还没将冰球打到目标位置也当输。求用最小次数将冰球打到目标位置,或输出-1表示输了。

思路:

分析:一般来说,求最小步数之类的迷宫问题都是用BFS解决的,但这题涉及到迷宫状态的变化(墙),BFS要不断记录状态的变化很复杂,不过网上好像也有人用BFS做的。DFS更加适合这种状态一直变化的,只不过要保存最优值而已,其实最优值也方便剪枝(当前步数已经是当前最优值大小但还没到达目的地也就没必要进行下去了)。需要注意的是,这题并不是移动一格,而是一直移动直到遇到障碍物。特别是目标点可能在移动的过程中到达。具体看代码。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 using namespace std;11 typedef pair
Pair;12 typedef long long ll;13 const int INF = 0x3f3f3f3f;14 int T, n, m, d;15 const int maxn = 1e5 + 10;16 int Map[150][150], ans;//Map[i][j]表示ij这个点的最短17 int dir[4][2] = { 1,0,0,1,-1,0,0,-1};18 bool judge(int x, int y)19 {20 return (x >= 0 && x < n && y >= 0 && y < m);21 }22 void dfs(int x, int y, int d)23 {24 if(Map[x][y] == 3)25 {26 ans = min(ans, d);27 return;28 }29 if(d >= 10)return;30 for(int i = 0; i < 4; i++)31 {32 int xx = x + dir[i][0];33 int yy = y + dir[i][1];34 if(!judge(xx, yy) || Map[xx][yy] == 1)continue;35 while(1)36 {37 if(!judge(xx, yy))break;38 if(Map[xx][yy] == 1)39 {40 Map[xx][yy] = 0;41 dfs(xx-dir[i][0], yy-dir[i][1], d + 1);42 Map[xx][yy] = 1;43 break;44 }45 else if(Map[xx][yy] == 3)46 {47 dfs(xx, yy, d + 1);48 break;49 }50 xx += dir[i][0];51 yy += dir[i][1];52 }53 }54 }55 int main()56 {57 while(cin >> m >> n && (n + m))58 {59 int sx, sy;60 for(int i = 0; i < n; i++)61 for(int j = 0; j < m; j++)62 {63 cin >> Map[i][j];64 if(Map[i][j] == 2)65 sx = i, sy = j, Map[i][j] = 0;66 }67 ans = INF;68 dfs(sx, sy, 0);69 if(ans > 10)cout<<"-1"<

 

转载于:https://www.cnblogs.com/fzl194/p/8823089.html

你可能感兴趣的文章
使用动态SQL语句实现简单的行列转置(动态产生列)
查看>>
Python字符编码详解(转)
查看>>
使用 IntraWeb (1) - 先测试如何部署为 Asp.Net 的应用
查看>>
TCP/IP数据包结构具体解释
查看>>
[WCF编程]7.实例上下文模式
查看>>
VMware coding Challenge
查看>>
使用EF取数据库返回的数据
查看>>
EditText获取焦点监听事件_EditText获取和失去焦点操作
查看>>
不同组织物料类别差异列表
查看>>
Tabio – 轻松,高效的管理 Chrome 标签页
查看>>
android4.0 的图库Gallery2代码分析(四) 之相册的数据处理以及显示
查看>>
事务——原子性、一致性、隔离性和持久性的理解
查看>>
MySQL内存调优
查看>>
測试文档和用户说明书
查看>>
POJ 2309 BST
查看>>
【extjs】 extjs5 Ext.grid.Panel 搜索示例
查看>>
Java并发编程:synchronized
查看>>
apache2添加模块和添加站点
查看>>
thinkphp分页
查看>>
内部排序-第10章-《数据结构题集》习题解析-严蔚敏吴伟民版
查看>>