#BFS
기본적인 BFS문제에서 짝수시간과 홀수시간을 분리하여 visit을 확인하면된다.
흠.... 생각보다 실수를 많이해서 여러번 제출하였다....
#include <iostream> #include <algorithm> #include <queue> #define MAX 305 #define INF 987654321 #define MOD 1000000 #pragma warning(disable:4996) using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int, int> pi; typedef pair<float, float> pf; struct st{ int turn; int x; int y; }; int a,b,c,d,x,y; int dy[8]={2,2,-2,-2,1,-1,1,-1},dx[8]={1,-1,1,-1,2,2,-2,-2}; queue<st> q; bool tf[2][MAX][MAX]; int main() { scanf("%d%d%d%d",&a,&b,&c,&d); for(int i=0;i<b;i++) { scanf("%d%d",&x,&y); st s={0,x,y}; q.push(s); tf[0][y][x]=true; } for(int i=0;i<d;i++) { while(!q.empty()&&q.front().turn==i%2) { st tmp = q.front(); q.pop(); for(int k=0;k<8;k++) { int ty=tmp.y+dy[k],tx=tmp.x+dx[k]; if(1<=ty&&ty<=a&&1<=tx&&tx<=a) { if(tf[(i+1)%2][ty][tx]==false) { st s={(i+1)%2,x,y}; q.push(s); tf[(i+1)%2][ty][tx]=true; } } } } } for(int i=0;i<c;i++) { scanf("%d%d",&x,&y); if(tf[d%2][y][x]==true) { printf("YES"); return 0; } } printf("NO"); return 0; }
'IT > BOJ' 카테고리의 다른 글
백준(BOJ) 3079 입국심사 ** (0) | 2018.06.17 |
---|---|
백준(BOJ) 15803 PLAYERJINAH’S BOTTLEGROUNDS * (0) | 2018.06.16 |
백준(BOJ) 1495 기타리스트 ** (0) | 2018.06.15 |
백준(BOJ) 15805 트리 나라 관광 가이드 ** (0) | 2018.06.15 |
백준(BOJ) 15804 저거 못타면 지각이야!! ** (0) | 2018.06.15 |