눈팅하는 게임개발자 블로그

백준 알고리즘 1260 본문

공부한거/백준알고리즘

백준 알고리즘 1260

Palamore 2018. 5. 16. 20:23
#include
#include
using namespace std;
#define SWAP(x,y,z) z = x, x = y, y = z;
int line[1001][1001];
int visited[1001];
class queq {
	private:
		int arr[1000];
		int *_front;
		int *_back;
		int size;
		void bubble_swap() {
			int temp = -1;
			for (int i = 0; i < size; i++) {
				SWAP(arr[i], arr[i + 1], temp);
			}
		}
		void renew() {
			if (size == 0) {
				_front = nullptr;
				_back = nullptr;
			}
			else {
				_back = arr + size - 1;
				_front = arr;
			}
		}
	public:
		queq() {
			memset(arr, -1, 1000 * sizeof(int));
			size = 0;
			_front = nullptr;
			_back = nullptr;
		}
		void push(int a) {
			arr[size] = a;
			size++;
			renew();
		}
		int pop() {
			int temp;
			if (size != 0) {
				size--;
				temp = arr[0];
				arr[0] = -1;
				renew();
				bubble_swap();
				return temp;
			}
			else {
				return -1;
			}
		}
		int rsize() {
			return size;
		}
		int empty() {
			if (size == 0) {
				return 1;
			}
			else {
				return 0;
			}
		}
		int front() {
			if (_front == nullptr) {
				return -1;
			}
			return *_front;
		}
		int back() {
			if (_back == nullptr) {
				return -1;
			}
			return *_back;
		}
	};

void dfs(int v, int end, queq *qq) {
	int temp, temp2;
	if (visited[v] != 1) {
		qq->push(v);
		visited[v] = 1;
		temp = v;
			temp2 = 1;
			while (end >= temp2) {
				if (line[temp][temp2]) {
					dfs(temp2, end, qq);
				}
				temp2++;
			}
	}
}

void bfs(int v, int end, queq *qq) {
	int temp, temp2;
		temp = v;
		temp2 = 1;
			while (end >= temp2) {
				if (line[temp][temp2]) {
					if (visited[temp2] != 1) {
						qq->push(temp2);
						visited[temp2] = 1;
					}
				}
				temp2++;
		}
}

int main() {
	queq q;
	queq bq;
	for (int i = 0; i < 1001; i++) {
		memset(line[i], 0, 1001 * sizeof(int));
	}
	memset(visited, 0, 1001 * sizeof(int));
	int N, L, S;
	int L1, L2;
	cin >> N >> L >> S;

	for (int i = 0; i < L; i++) {
		cin >> L1 >> L2;
		line[L1][L2] = 1;
		line[L2][L1] = 1;
	}

	dfs(S, N, &q);

	while (!q.empty()) {
		cout << q.pop() << " ";
	}
	cout << "\n";
	memset(visited, 0, 1001 * sizeof(int));
	
	bq.push(S);
	bfs(S, N, &bq);
	visited[S] = 1;
	while (!bq.empty()) {
		cout << bq.front() << " ";
		
		bfs(bq.pop(), N, &bq);
	}

		return 0;
}

https://www.acmicpc.net/problem/1260


기본적인 자료구조

책한번 훑었다.



'공부한거 > 백준알고리즘' 카테고리의 다른 글

백준 알고리즘 1966  (0) 2018.05.16
백준 알고리즘 9020  (0) 2018.01.12
백준 알고리즘 2108  (0) 2018.01.08
백준 알고리즘 10989  (0) 2018.01.05
백준 알고리즘 6064  (0) 2018.01.02