백준 2668 c++ : DFS

magicdrill·2025년 4월 10일
0

백준 문제풀이

목록 보기
584/654

백준 2668 c++ : DFS

#include <iostream>
#include <vector>
#include <stack>

using namespace std;

void input_data(vector<int>& table);
void find_answer(vector<int>& table);

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

	vector<int> table;

	input_data(table);
	find_answer(table);

	return 0;
}

void input_data(vector<int> &table) {
	int N, i;

	cin >> N;
	table.resize(N + 1);
	for (i = 1; i <= N; i++) {
		cin >> table[i];
	}

	return;
}

void find_answer(vector<int>& table) {
	vector<int> result;
	int i, j, N = table.size() - 1, current, next;
	
	//DFS인거 같은데
	for (i = 1; i <= N; i++) {
		vector<bool> visited(N + 1, false);
		stack <int> st;
		st.push(i);

		while (!st.empty()) {
			current = st.top();
			st.pop();

			if (visited[current]) {//방문한 적 있다면?
				continue;
			}
			
			visited[current] = true;
			next = table[current];
			if (next == i) {
				result.push_back(i);
				cout << "result : ";
				for (int num : result) {
					cout << "(index : " << num << ", value : " <<  table[num] << ") ";
				}
				cout << "\n";
				break;
			}

			if (!visited[next]) {//방문한 적 없다면?
				st.push(next);
			}
		}
	}

	cout << result.size() << "\n";
	for (int num : result) {
		cout << num << "\n";
	}

	return;
}

0개의 댓글