题目链接:http://codeforces.com/contest/540/problem/C

(最近 unhappy!)

题意:初始时候在一个破碎的冰块上,每次只能走到临近的四个未破碎冰块上。未破碎的冰块被踩后变为破碎。且不能在冰块上停留。踩上破碎的冰块就会掉入此坐标。问 是否可以在掉进给定的坐标。

代码:

#include <stdio.h>
#include <iostream>
#include <math.h>
#include <string.h>
#include <string>
#include <algorithm>
#include <ctype.h>
#include <time.h>
#include <queue>
#include <stdlib.h>

using namespace std;

int n, m, ok;
char p[510][510];
int sx, sy, ex, ey;
int dir[4][2] = { { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 } };

int check(int x, int y)
{
    if (x < 1 || x > n || y < 1 || y > m) return 0;
    if (p[x][y] == 'X')
    {
        if (x == ex && y == ey )
            ok = 1;
        return 0;
    }
    return 1;
}

void dfs(int x,int y)
{
    p[x][y] = 'X';
    for (int i = 0; i < 4; i++)
    {
        int xx = x + dir[i][0];
        int yy = y + dir[i][1];
        if (check(xx, yy)) dfs(xx, yy);
    }                                
}

int main()
{
    while (scanf("%d%d", &n, &m) != EOF)
    {
        for (int i = 1; i <= n; i++)
            scanf("%s",p[i]+1);
        //cout << endl;
        //for (int i = 1; i <= n; i++)
        //  puts(p[i]+1);
        scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
        ok = 0;
        dfs(sx,sy);
        if (ok)
            puts("YES");
        else
            puts("NO");
    }

    return 0;
}