设为首页 加入收藏

TOP

POJ3009 Curling 2.0(DFS)
2015-07-20 17:32:22 来源: 作者: 【 】 浏览:3
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题 之十五 汽车加油行驶..

评论

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

·About - Redis (2025-12-26 08:20:56)
·Redis: A Comprehens (2025-12-26 08:20:53)
·Redis - The Real-ti (2025-12-26 08:20:50)
·Bash 脚本教程——Li (2025-12-26 07:53:35)
·实战篇!Linux shell (2025-12-26 07:53:32)