#include < iostream > #include < string > #include < set > #include < algorithm > #include < map > #include < vector > #include < queue > using namespace std; #define MAX 999999 int dir[ 4 ][ 2 ] = ... {...{0,1},...{0,-1},...{1,0},...{-1,0}} ; char MAP[ 101 ][ 101 ]; int val[ 101 ][ 101 ][ 5 ]; int m, n, turn;typedef struct ... { int x, y; int direction;} Node; int main() ... { int N; int i, j, k; Node s, t, tt; int sx, sy, ex, ey; cin >> N; while (N--) ...{ cin >> m >> n; for (i = 0;i < m; i++) ...{ for (j = 0; j < n; j++) ...{ cin >> MAP[i][j]; } } for (i = 0; i < m; i++) for(j = 0; j < n; j++) for(k = 1; k <= 4; k++) val[i][j][k] = MAX; cin >> turn; cin >> sy >> sx >> ey >> ex; sy--; sx--; ey--; ex--; if (sx == ex && sy == ey) ...{ cout << "yes" << endl; continue; } s.x = sx; s.y = sy; s.direction = 0; val[s.x][s.y][0] = 0; val[s.x][s.y][1] = 0; val[s.x][s.y][2] = 0; val[s.x][s.y][3] = 0; val[s.x][s.y][4] = 0; queue<Node> q; q.push(s); bool flag = false; while (!q.empty()) ...{ t = q.front(); q.pop(); if (t.x == ex && t.y == ey) break; for (i = 0; i < 4; i++) ...{ tt.x = t.x + dir[i][0]; tt.y = t.y + dir[i][1]; tt.direction = t.direction; if (MAP[tt.x][tt.y] == '.' && tt.x>=0&&tt.x<m && tt.y>=0&&tt.y<n) ...{ int cnt = 0; if (tt.direction == 0) //第一次 ...{ tt.direction = i + 1; } else if (tt.direction != i + 1) // 转弯 ...{ tt.direction = i + 1; cnt = 1; } if (val[t.x][t.y][t.direction]+cnt < val[tt.x][tt.y][tt.direction] && val[t.x][t.y][t.direction]+cnt<= turn) ...{ val[tt.x][tt.y][tt.direction] = val[t.x][t.y][t.direction]+cnt; q.push(tt); } } } } for (i=1; i<=4; ++i) ...{ if(val[ex][ey][i] != MAX) break; } if (i<=4) ...{ cout << "yes" << endl; } else cout << "no" << endl; } return 0;}