PS/알고스팟
[알고스팟] 피크닉(PICNIC) - C++
발효홍삼
2022. 2. 19. 17:35
728x90
- 문제
https://algospot.com/judge/problem/read/PICNIC
algospot.com :: PICNIC
소풍 문제 정보 문제 안드로메다 유치원 익스프레스반에서는 다음 주에 율동공원으로 소풍을 갑니다. 원석 선생님은 소풍 때 학생들을 두 명씩 짝을 지어 행동하게 하려고 합니다. 그런데 서로
algospot.com
- 풀이
#include <iostream>
#include <cstring>
using namespace std;
int c,n,m; // 테스트 케이스의 수 c, 학생의 수 n, 친구 쌍의 수 m
int f[11][11];
bool check[11]; //짝을 지었는지 확인
int solve()
{
int x = -1;
for (int i = 0; i < n; i++) // 가장 빠른 학생 찾기
{
if (!check[i])
{
x = i;
break;
}
}
if (x == -1) return 1;
int ans = 0;
for (int i = x + 1; i < n; i++)
{
if (!check[i] && f[x][i])
{
check[x] = check[i] = 1; // 짝이 정해짐
ans += solve();
check[x] = check[i] = 0; //짝 해제
}
}
return ans;
}
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> c;
while(c--)
{
cin >> n >> m;
memset(f, 0, sizeof(f));
memset(check, 0, sizeof(check));
for (int i = 0; i < m; i++)
{
int x, y;
cin >> x >> y;
f[x][y] = f[y][x] = 1;
}
cout << solve() <<"\n";
}
return 0;
}
- 느낀 점
고민하다 결국 종만북을 보고 풀었다. 아직 재귀에 대해 미숙한 점이 있다.
728x90