끄적끄적 코딩
article thumbnail

DFS, BFS 문제입니다.

현재 위치에서 도착지까지 이동할 수 있는지 확인하고,
편의점의 위치를 vector에 넣어놓고 하나씩 꺼내면서 이동이 가능한지 체크했습니다.
DFS를 이용해서 이동이 가능하다면 그 위치에서 다시 탐색합니다.

시작위치를 DFS에 넣고 1~3을 반복합니다.

DFS
1. 도착지와의 거리가 1000이하인지 - 맞다면 flag = 1 (happy)
2. 편의점 하나씩 탐색 - 이미 방문 했다면 continue;
3. 편의점과의 거리가 1000이하라면 DFS(편의점 위치)

flag == 1 이라면 happy를 출력해주고
flag == 0 이라면 sad를 출력해줍니다.

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;

int n;
int ts;
int x, y;
int flag;
int nowX, nowY;
int endX, endY;
int visit[110];
vector<pair<int, int> > mart;

void DFS(int a, int b)
{
	int num;

	num = abs(endX - a) + abs(endY - b);

	if (flag == 1 || num <= 1000) {
		flag = 1;
		return;
	}

	for (int i = 0; i < mart.size(); ++i) {
		if (visit[i] == 1) {
			continue;
		}

		num = abs(mart[i].first - a) + abs(mart[i].second - b);

		if (num > 1000) {
			continue;
		}
		else {
			visit[i] = 1;
			DFS(mart[i].first, mart[i].second);
		}
	}
}

int main(int argc, char *argv[]) 
{
	cin >> ts;

	while (ts--) {
		cin >> n;
		cin >> nowX >> nowY;

		mart.clear();
		memset(visit, 0, sizeof(visit));

		for (int i = 0; i < n; ++i) {
			cin >> x >> y;
			mart.push_back(make_pair(x, y));
		}
		cin >> endX >> endY;

		flag = 0;
		DFS(nowX, nowY);

		if (flag == 1) {
			cout << "happy" << endl;
		}
		else {
			cout << "sad" << endl;
		}
	}
	return 0;
}

'알고리즘' 카테고리의 다른 글

[C++] 백준 2875번 대회 or 인턴  (0) 2019.09.26
[C++] 백준 10610번 30  (0) 2019.09.25
[C++] 백준 10800번 컬러볼  (0) 2019.09.25
[C++] 백준 10799번 쇠막대기  (0) 2019.09.24
[C++] 백준 2846번 오르막길  (0) 2019.09.24

검색 태그