zoukankan      html  css  js  c++  java
  • HDU 1010

    经典搜索

     1 #include <iostream>
     2 #include <cstdio>
     3 using namespace std;
     4 
     5 const int MAX=10;
     6 
     7 int step[MAX][MAX];
     8 char maze[MAX][MAX];
     9 int n,m,t;
    10 struct {
    11     int i,j;
    12 }beg,des;
    13 int dir[4][2]={0,1,1,0,0,-1,-1,0};
    14 
    15 bool ok(int i,int j){
    16     if(i<1||i>n||j<1||j>m||maze[i][j]=='X')
    17     return false;
    18     return true;
    19 }
    20 
    21 bool dfs(int i,int j,int time){
    22     if(time==0&&i==des.i&&j==des.j) return true;
    23     else if(time==0) return false;
    24     
    25     int ti,tj;
    26     for(int k=0;k<4;k++){
    27         ti=i+dir[k][0];
    28         tj=j+dir[k][1];
    29         if(ok(ti,tj)){
    30             if(time-1<abs(des.i-ti)+abs(des.j-tj)) continue;
    31             maze[i][j]='X';
    32             if(dfs(ti,tj,time-1)) return true;
    33             maze[i][j]='.';
    34         }
    35     }
    36     
    37     return false;
    38 }
    39 
    40 int main(){
    41     for(int i=1;i<=7;i++)
    42     step[0][i]=i%2;
    43     for(int i=1;i<=7;i++){
    44         for(int j=1;j<=7;j++)
    45         step[i][j]=step[i-1][j]^1;
    46     }
    47     while(scanf("%d%d%d",&n,&m,&t)!=EOF){
    48         if(n==0&&m==0&&t==0) break;
    49         int cnt=0;
    50         for(int i=1;i<=n;i++){
    51             scanf("%s",maze[i]+1);
    52             for(int k=1;k<=m;k++){
    53                 if(maze[i][k]=='.') cnt++;
    54                 if(maze[i][k]=='S'){
    55                     beg.i=i; beg.j=k;
    56                 }
    57                 if(maze[i][k]=='D'){
    58                     des.i=i; des.j=k; 
    59                 }
    60             }
    61         }
    62         cnt++;
    63         if(cnt<t){
    64             printf("NO
    "); continue;
    65         }
    66         if(step[beg.i][beg.j]==step[des.i][des.j]&&t%2==1){
    67             printf("NO
    "); continue;
    68         }
    69         if(step[beg.i][beg.j]!=step[des.i][des.j]&&t%2==0){
    70             printf("NO
    "); continue;
    71         }
    72     //    cout<<"here"<<endl;
    73         if(dfs(beg.i,beg.j,t))
    74         printf("YES
    ");
    75         else printf("NO
    ");
    76     }
    77     return 0;
    78 }
    View Code
  • 相关阅读:
    循环链表结构
    复杂的权衡之时间、空间和单链表结构
    单链表操作之删除
    单链表操作之插入
    单链表操作之替换
    单链表操作之搜索
    文件系统的原理
    类加载的三种方式比较
    shell中awk printf的用法
    推荐网站
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/3795442.html
Copyright © 2011-2022 走看看