设为首页 加入收藏

TOP

POJ3009 Curling 2.0(DFS)
2015-07-20 17:32:22 来源: 作者: 【 】 浏览:2
Tags:POJ3009 Curling 2.0 DFS

迷宫问题求最短路。略有不同的是如果不碰到石头的话会沿着一个方向一直前进,出界就算输了。碰到石头,前方石头会消失,冰壶停在原地。把这个当作状态的转移。DFS可以求出其最小操作数。

#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        #include
       
         #include
        
          #include
         
           #define ll __int64 #define INF 0x3f3f3f using namespace std; int n,m; int ex,ey; int Min; int dir[4][2]= {{1,0},{0,1},{0,-1},{-1,0}}; int map[25][25]; void dfs(int x,int y,int count) { if(count>10) return; for(int i=0; i<4; i++) { int move_ok=0; int xx=x,yy=y; if(map[x+dir[i][0]][y+dir[i][1]]==1) continue; while(true) { xx=xx+dir[i][0]; yy=yy+dir[i][1]; if(xx<0||xx>=n||yy<0||yy>=m) break; if(map[xx][yy]==1) { move_ok=1; break; } if(map[xx][yy]==3) { if(Min>count) { Min=count; break; } } } if(move_ok) { map[xx][yy]=0; dfs(xx-dir[i][0],yy-dir[i][1],count+1); map[xx][yy]=1; } } } int main() { //freopen("d:\\test.txt","r",stdin); int sx,sy; while(cin>>m>>n) { if(m==0&&n==0) break; memset(map,0,sizeof(map)); for(int i=0; i
          
           >map[i][j]; if(map[i][j]==2) { sx=i; sy=j; } } } Min=11; dfs(sx,sy,1); if(Min>10) cout<<"-1"<
           
            

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Ural 1152 False Mirrors(状压DP.. 下一篇网络流24题 之十五 汽车加油行驶..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)
·Redis配置中`require (2025-12-26 03:18:58)
·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)