#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;
}
杭电ACM1010(搜索题)
最新推荐文章于 2018-04-30 21:46:07 发布