设为首页 加入收藏

TOP

HDU1010-奇偶剪枝
2015-07-20 18:07:28 来源: 作者: 【 】 浏览:11
Tags:HDU1010- 奇偶 剪枝

题目链接:Tempter of the Bone


第一次做剪枝的题目,剪枝,说实话研究的时间不短,好像没什么实质性的进展,遇到题目,绝对有会无从下手的感觉,剪枝越来越神秘了。。。。


HDU1010一道剪枝的经典题目,自己当初想用BFS过,提交了10几遍WA,后来查了是剪枝终于死心了


PS:第一次写剪枝题目,用了一个模拟地图来做奇偶性的判定条件进行剪枝,大牛们写的那种俺实在看不懂,渣渣儿。。。。

代码有点挫。。。。562ms低空掠过

\

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       using namespace std; char ma[10][10]; bool vis[10][10]; bool mapp[10][10] = {{0,1,0,1,0,1,0,1,0,1},{1,0,1,0,1,0,1,0,1,0},{0,1,0,1,0,1,0,1,0,1}, {1,0,1,0,1,0,1,0,1,0},{0,1,0,1,0,1,0,1,0,1},{1,0,1,0,1,0,1,0,1,0}, {0,1,0,1,0,1,0,1,0,1},{1,0,1,0,1,0,1,0,1,0},{0,1,0,1,0,1,0,1,0,1}, {1,0,1,0,1,0,1,0,1,0}}; int n,m,T,dx,dy; bool flag; int mv[4][2]={{1,0},{0,-1},{0,1},{-1,0}}; void dfs(int sx,int sy,int dp) { if(dp==T&&sx==dx&&sy==dy) { flag=1; return ; } if(flag) return; int t = T - dp; if(mapp[sx][sy]==mapp[dx][dy]) //奇偶剪枝 { if(t % 2) return ; } else { if(t % 2==0) return ; } for(int i=0;i<4;i++) { int xx = sx + mv[i][0]; int yy = sy + mv[i][1]; if(ma[xx][yy]!='X' && vis[xx][yy]!=1 &&0<=xx && xx
      
       

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇链表(一)――创建一个最基本的.. 下一篇POJ3264――Balanced Lineup(线..

评论

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