首页 > 其他 > 详细

HDU1010-奇偶剪枝

时间:2014-07-15 22:29:05      阅读:537      评论:0      收藏:0      [点我收藏+]

题目链接:Tempter of the Bone


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


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


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

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

bubuko.com,布布扣

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
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<n && 0<=yy && yy<m)
      {
         vis[xx][yy] = 1;
         dfs(xx,yy,dp+1);
         vis[xx][yy] = 0;
      }
   }
   return;
}
int main()
{
    int sx,sy;
    while(~scanf("%d%d%d",&n,&m,&T))
    {
        if(n==0&&m==0&&T==0) break;
    memset(vis,0,sizeof(vis));
      for(int i=0;i<n;i++)
      {
          scanf("%s",ma[i]);
           for(int j=0;j<m;j++)
         {
            if(ma[i][j]=='S')
                { sx=i; sy=j; }
            else if(ma[i][j]=='D')
                { dx=i; dy=j; }
         }
      }
       flag=0;
       vis[sx][sy] = 1;
       dfs(sx,sy,0);
       (flag==1)? puts("YES"):puts("NO");
   }
   return 0;
}


HDU1010-奇偶剪枝,布布扣,bubuko.com

HDU1010-奇偶剪枝

原文:http://blog.csdn.net/wjw0130/article/details/37780153

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!