poj 3009 (深搜求最短路)
2017-03-05 08:25
337 查看
题目大意就是求在特定规则下的最短路,这个规则包含了消除障碍的操作。用BFS感觉选择消除障碍的时候不同路径会有影响,用DFS比较方便状态的还原(虽然效率比较低),因此这道题目采用DFS来写。
写的第一次提交代码是TLE,原因是忘记总步数>10就应该剪枝的条件。AC代码如下:
写的第一次提交代码是TLE,原因是忘记总步数>10就应该剪枝的条件。AC代码如下:
#include <cstdio> #include <algorithm> #include <iostream> using namespace std; const int maxn = 22; struct Point{ int r, c; Point(int r=-1, int c=-1):r(r),c(c){} }; Point s,t; int W,H; int G[maxn][maxn]; const int dr[] = {1,-1,0,0}; const int dc[] = {0,0,-1,1}; int ans = 100000; void dfs(int r,int c,int k){ if(k >= 10) return ; for(int i = 0; i < 4; i++){ int nr = r; int nc = c; int is_walk = 0; while(G[nr+dr[i]][nc+dc[i]]==0){ is_walk=1; nr+=dr[i]; nc+=dc[i]; if(nr == t.r && nc == t.c){ ans = min(ans,k+1); return ; } } if(!is_walk)continue; if(G[nr+dr[i]][nc+dc[i]] == 4)continue ; if(G[nr+dr[i]][nc+dc[i]] == 1){ G[nr+dr[i]][nc+dc[i]] = 0; dfs(nr,nc,k+1); G[nr+dr[i]][nc+dc[i]] = 1; } } } int main(){ while(scanf("%d%d ", &W, &H) && (W || H)){ ans = 100000; for(int i = 1; i <= H; i++){ for(int j = 1; j <= W; j++) scanf("%d",&G[i][j]); } for(int i = 0; i <= W+1; i++) G[0][i] = 4,G[H+1][i] = 4; for(int i = 0; i <= H+1; i++) G[i][0] = 4,G[i][W+1] = 4; for(int i = 1; i <= H; i++){ for(int j = 1; j <= W; j++){ if(G[i][j] == 2){ s = Point(i,j); G[i][j] = 0; } else if (G[i][j] == 3){ t = Point(i,j); G[i][j] = 0; } } } dfs(s.r,s.c,0); if(ans != 100000 && ans <= 10)printf("%d\n",ans); else printf("%d\n",-1); } return 0; }
相关文章推荐
- poj 3009 dfs暴力解决最短路
- POJ3009 Curling2.0 (DFS求最短路(已知最长的情况下))
- 【原创】poj ----- 3009 curling 2 解题报告
- Poj_2253 Frogger(最短路-SPFA+Dijkstra)
- POJ 3268 D - Silver Cow Party(往返路程最短路)
- POJ - 3268 Silver Cow Party (最短路)
- poj 1511 Invitation Cards (最短路)
- poj 3009 Curling 2.0
- POJ 3268 Silver Cow Party [图论.最短路] 《挑战程序设计竞赛》2.5
- POJ 2253 Frogger (最小生成树 or 最短路变形)
- poj1062昂贵的聘礼(题解)最短路
- poj 2449 Remmarguts' Date(A*求第K短路)
- poj 3259 最短路负环
- POJ 2387 最短路Dijkstra算法
- Poj 1797 Heavy Transportation (最短路变形)
- poj 3037(最短路)
- POJ1062 昂贵的聘礼(Dijkstra最短路)
- poj 2449(A*+dijstra求k短路)
- poj 1860 -- Currency Exchange(最短路)
- BFS——Poj 3009 Curling 2.0