THDU 1010 empter of the Bone(奇偶剪枝+DFS)

    技术2024-05-20  86

     

    Sample Output

    NO

    YES

    我们定义剩余时间为 res ,如果剩余时间很多且 res 为奇数那么必然不可能恰好到达,因为每多拐一个弯则必然多出偶数步,所以 res 与 距离终点的格子数应该具有相同的奇偶性。

    #pragma GCC optimize(2) #include <bits/stdc++.h> /*#include <iostream> #include <cmath> #include <cstdio> #include <algorithm>*/ #define rush() int T;cin>>T;while(T--) #define ms(a,b) memset(a,b,sizeof a) #define E 1e-11 #define sd(a) scanf("%d",&a) #define sdd(a,b) scanf("%d%d",&a,&b) #define sf(a) scanf("%lf",&a) #define sc(a) scanf("%c\n",&a) #define ss(a) scanf("%s",&a) #define pd(a) printf("%d\n",a) #define pdd(a,b) printf("%d %d\n",a,b) #define pddd(a,b,c) printf("%d %d %d\n",a,b,c) #define pld(a) printf("%I64d\n",a) #define pf(a) printf("%.2lf\n",a) #define REP(a) for(int i=0;i<(a);i++) #define debug(a) cout<<"*"<<a<<"*"<<endl #define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0) #define PAUSE system("pause") #define fr first #define sc second using namespace std; typedef long long ll; //using ui=unsigned int; typedef unsigned long long ull; typedef pair<int,int> Pair; const double pi=acos(-1.0); const int dx[]={0,1,0,-1}; const int dy[]={1,0,-1,0}; const int inf=0x7f7f7f7f; const int mod=1e9+7; const int N=10+5; int n,m,t; int i,j,k; char a[N][N]; bool flag; bool valid(int x,int y) { if(x<0 || x>=n) return false; if(y<0 || y>=m) return false; return true; } void dfs(int x,int y,int cost,int aimx,int aimy) { if(flag) return ; if(!cost) { if(x==aimx&&y==aimy) flag=1; return ; } if( cost<abs(x-aimx)+abs(y-aimy) ) return ; if( ( cost-abs(x-aimx)-abs(y-aimy) )&1 ) return ;//奇偶剪枝 for(int i=0;i<4;i++) { int nx=x+dx[i],ny=y+dy[i]; if(valid(nx,ny)&&(a[nx][ny]=='.'||a[nx][ny]=='D')) { a[nx][ny]='X'; dfs(nx,ny,cost-1,aimx,aimy); a[nx][ny]='.'; } } return ; } int main() { while(scanf("%d%d%d",&n,&m,&t),m) { int x,y,nx,ny; for(int i=0;i<n;i++) for(int j=0;j<m;j++) { cin>>a[i][j]; if(a[i][j]=='S') nx=i,ny=j; if(a[i][j]=='D') x=i,y=j; } flag=0; dfs(nx,ny,t,x,y); puts(flag ? "YES" : "NO"); } return 0; }

     

    Processed: 0.012, SQL: 10