写了好久好久好久。。。。。无语了
#include <iostream>
#include <string.h>#include <stdlib.h>
#include <stdio.h>
using namespace std;
int move[4][2] = {{0,1} , { 1, 0}, {0,-1}, {-1,0}};
bool map[505][505][4], vis[505][505];
int R, C, s, e;
bool check( )
{
for( int i = 1; i <= R; i++)
for( int j = 1; j <= C; j++)
if(!vis[i][j])
return 0;
return 1;
}
struct node
{
int x, y, f;
node( int a, int b , int c)
{
x = a;
y = b;
f = c;
}
};
void Init()
{
scanf("%d%d%d%d",&R, &C, &s, &e);
s++;
e++;
memset(vis, 0 , sizeof(vis));
memset(map, 0, sizeof(map));
int a;
for( int i = 1; i <= R * 2 - 1; i++)
{
int a;
if(i%2)
{
for( int j = 1; j <= C-1; j++)
{
scanf("%d",&a);
map[(i+1)/2][j+1][1] = map[(i+1)/2][j][3] = a;
}
}
else
{
for( int j = 1; j <= C ; j++)
{
scanf("%d",&a);
map[(i+1)/2][j][0] = map[(i+1)/2 + 1][j][2] = a;
}
}
}
// for( int i = 1; i <= R; i++)
// {
// for( int j = 1; j <= C; j++)
// {
// for( int k = 0; k < 4; k++)
// cout<<map[i][j][k]<<" ";
// cout<<endl;
// }
// cout<<"______________"<<endl;
// }
}
void Dfs(node cur, node end)
{
int f = cur.f;
while(1)
{
vis[cur.x][cur.y] = 1;
if(cur.x == end.x && cur.y == end.y)
{
if((cur.f == 1 && f == 2) || (cur.f == 3 && f ==0))
break;
if(cur.f == f && f == 0 && (cur.y == 1 || map[cur.x][cur.y][1]) == 1)
break;
if(cur.f == f && f == 2 && cur.y == C || map[cur.x][cur.y][3] == 1)
break;
}
if(cur.f == 0)
{
if(cur.y > 1 && map[cur.x][cur.y][1] == 0)
{
cur.y--;
cur.f = 1;
}
else if(cur.x < R && map[cur.x][cur.y][0] == 0)
{
cur.x++;
cur.f = 0;
}
else if(cur.y < C && map[cur.x][cur.y][3] == 0)
{
cur.y++;
cur.f = 3;
}
else if(cur.x > 1 && map[cur.x][cur.y][2] == 0)
{
cur.x--;
cur.f = 2;
}
}
else if(cur.f == 1)
{
if(cur.x > 1 && map[cur.x][cur.y][2] == 0)
{
cur.x--;
cur.f = 2;
}
else if(cur.y > 1 && map[cur.x][cur.y][1] == 0)
{
cur.y--;
cur.f = 1;
}
else if(cur.x < R && map[cur.x][cur.y][0] == 0)
{
cur.x++;
cur.f = 0;
}
else if(cur.y < C && map[cur.x][cur.y][3] == 0)
{
cur.y++;
cur.f = 3;
}
}
else if(cur.f == 2)
{
if(cur.y < C && map[cur.x][cur.y][3] == 0)
{
cur.y++;
cur.f = 3;
}
else if(cur.x > 1 && map[cur.x][cur.y][2] == 0)
{
cur.x--;
cur.f = 2;
}
else if(cur.y > 1 && map[cur.x][cur.y][1] == 0)
{
cur.y--;
cur.f = 1;
}
else if(cur.x < R && map[cur.x][cur.y][0] == 0)
{
cur.x++;
cur.f = 0;
}
}
else if(cur.f == 3)
{
if(cur.x < R && map[cur.x][cur.y][0] == 0)
{
cur.x++;
cur.f = 0;
}
else if(cur.y < C && map[cur.x][cur.y][3] == 0)
{
cur.y++;
cur.f = 3;
}
else if(cur.x > 1 && map[cur.x][cur.y][2] == 0)
{
cur.x--;
cur.f = 2;
}
else if(cur.y > 1 && map[cur.x][cur.y][1] == 0)
{
cur.y--;
cur.f = 1;
}
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
Init();
node sta = node(1, s, 0);
node end = node(R, e, 2);
Dfs(sta, end);
Dfs(end, sta);
if(check())
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}