zoukankan      html  css  js  c++  java
  • HDU 1010 Tempter of the Bone

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <algorithm>
     6 char maze[8][8];
     7 int n, m, t;
     8 int mx, my, X, Y;
     9 int flag, tt;
    10 int Move[4][2]= {{-1,0},{1,0},{0,1},{0,-1}};
    11 void DFS(int x,int y,int k);
    12 int main()
    13 {
    14     int i, j;
    15     while(scanf("%d %d %d",&n,&m,&t)!=EOF, m||n||t)
    16     {
    17         tt = 0;
    18         flag = 0;
    19         getchar();
    20         for(i = 0; i < n; i++)
    21         {
    22             for(j = 0; j < m; j++)
    23             {
    24                 scanf("%c",&maze[i][j]);
    25                 if(maze[i][j]=='S')
    26                 {
    27                     mx = i;
    28                     my = j;
    29                     maze[mx][my]='X';
    30                 }
    31                 else if(maze[i][j]=='D')
    32                 {
    33                     X = i;
    34                     Y = j;
    35                     tt++;
    36                 }
    37                 else if(maze[i][j]=='.')
    38                     tt++;
    39             }
    40             getchar();
    41         }
    42         if(tt>=t && abs(X-mx)+abs(Y-my)<=t)// &&  !(abs(X-mx)+abs(Y-my)-t)&1 不可以加
    43             DFS(mx,my,0);
    44         if(flag)
    45             printf("YES
    ");
    46         else
    47             printf("NO
    ");
    48     }
    49     return 0;
    50 }
    51 void DFS(int x,int y,int k)
    52 {
    53     int i;
    54     if(t==k && X==x && Y==y)
    55         flag = 1;
    56     if(flag)
    57         return;
    58     int v = t-k-abs(X-x)-abs(Y-y);
    59     if(v<0||v&1)
    60         return;
    61     for(i=0; i<4; i++)
    62     {
    63         int xx=Move[i][0]+x;
    64         int yy=Move[i][1]+y;
    65         if(xx>=0 && xx<n && yy>=0 && yy<m && maze[xx][yy]!='X')
    66         {
    67             maze[xx][yy] = 'X';
    68             DFS(xx,yy,k+1);
    69             maze[xx][yy] = '.';
    70         }
    71     }
    72 }
    View Code

    1.奇偶剪枝

    2.偶数判断 &1

  • 相关阅读:
    C++中 extern "C" 的两种用法
    第5章类和对象(一)
    第4章 函数和作用域
    第5章类和对象(一)
    第5章类和对象(一)续
    C++中 extern "C" 的两种用法
    extern用法详解(转)
    第4章 函数和作用域
    IOS开发中一些尺寸问题
    键盘处理IOS
  • 原文地址:https://www.cnblogs.com/ghostTao/p/4313207.html
Copyright © 2011-2022 走看看