Notice
Recent Posts
Recent Comments
Link
250x250
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

피너클의 it공부방

백준 10974 모든 순열 (c++) : 피너클 본문

백준

백준 10974 모든 순열 (c++) : 피너클

피너클 2022. 10. 7. 18:41
728x90
반응형

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

 

10974번: 모든 순열

N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오.

www.acmicpc.net

dfs로 풀었다.

void solve(int idx, vector<int> v) {
	if (idx == n) {
		for (int i = 0; i < n; i++) cout << v[i] << ' ';
		cout << '\n';
		return;
	}
	for (int i = 1; i <= n; i++) {
		if (!visited[i]) {
			visited[i] = true;
			v.push_back(i);
			solve(idx + 1, v);
			visited[i] = false;
			v.pop_back();
		}
	}
}

solve함수는 (v에 저장된 수의 개수, vector)를 전달받는다.

만약 idx가 n이라면 v만의 모든 수를 출력한뒤 함수를 종료한다.

아니라면 1부터 n까지 반복하며 만약 방문하지 않았다면 v에 넣고 solve를 돌려주면 된다.

#include <iostream>
#include <vector>

using namespace std;

int n;
bool visited[9];

void solve(int idx, vector<int> v) {
	if (idx == n) {
		for (int i = 0; i < n; i++) cout << v[i] << ' ';
		cout << '\n';
		return;
	}
	for (int i = 1; i <= n; i++) {
		if (!visited[i]) {
			visited[i] = true;
			v.push_back(i);
			solve(idx + 1, v);
			visited[i] = false;
			v.pop_back();
		}
	}
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	cin >> n;
	for (int i = 1; i <= n; i++)visited[i] = false;
	solve(0, vector<int>());
}

전체코드다.

728x90
반응형
Comments