杭电ACM1010(搜索题)

来源:互联网 发布:java tomcat 部署 编辑:程序博客网 时间:2024/06/11 17:05
#include <iostream>using namespace std;char Maze[ 9 ][ 9 ];struct pos{int x, y;};int flag;int access;void fun(pos src, pos dst, int time){if(src.x == dst.x && src.y == dst.y && time == 0)//成功{access = 1;return;}else if(time == 0){return;}else{if(Maze[ src.x + 1 ][ src.y ] != 'X'){char s = Maze[ src.x ][ src. y ];Maze[ src.x ][ src.y ] = 'X';pos temp;temp.x = src.x + 1;temp.y = src.y;time --;fun(temp, dst, time);time ++;Maze[ src.x ][ src.y ] = s;}if(Maze[ src.x - 1 ][ src.y ] != 'X'){char s = Maze[ src.x ][ src. y ];Maze[ src.x ][ src.y ] = 'X';pos temp;temp.x = src.x - 1;temp.y = src.y;time --;fun(temp, dst, time);time ++;Maze[ src.x ][ src.y ] = s;}if(Maze[ src.x ][ src.y + 1 ] != 'X'){char s = Maze[ src.x ][ src. y ];Maze[ src.x ][ src.y ] = 'X';pos temp;temp.x = src.x;temp.y = src.y + 1;time --;fun(temp, dst, time);time ++;Maze[ src.x ][ src.y ] = s;}if(Maze[ src.x ][ src.y - 1 ] != 'X'){char s = Maze[ src.x ][ src. y ];Maze[ src.x ][ src.y ] = 'X';pos temp;temp.x = src.x;temp.y = src.y - 1;time --;fun(temp, dst, time);time ++;Maze[ src.x ][ src.y ] = s;}}}int main(){int N, M, T;while(scanf("%d %d %d", &N, &M, &T)){if(N == 0 && M == 0 && T == 0){break;}for(int i = 0; i < 9; i ++){for(int j = 0; j < 9; j ++){Maze[ i ][ j ] = 'X';}}int counter = 0;pos start, end;flag = 1;access = 0;start.x = -1;end.x = -1;for(int i = 1; i <= N; i ++){for(int j = 1; j <= M; j ++){cin>>Maze[ i ][ j ];if(Maze[ i ][ j ] == '.'){counter ++;}else if(Maze[ i ][ j ] == 'S'){start.x = i;start.y = j;}else if(Maze[ i ][ j ] == 'D'){end.x = i;end.y = j;}}}if(start.x == -1 || end.x == -1){flag = 0;}else if(((start.x + start.y) % 2 == (end.x + end.y) % 2) &&(T % 2 == 1))//奇偶剪枝{flag = 0;}else if(((start.x + start.y) % 2 != (end.x + end.y) % 2) &&(T % 2 == 0)){flag = 0;}else if(T > counter + 1){flag = 0;}if(flag == 0){printf("NO\n");}else{fun(start, end, T);if(access == 0){printf("NO\n");}else{printf("YES\n");}}}return 0;}

原创粉丝点击