안녕하세요. 알고리즘 문제 해결 전략 책을 보고 공부하고 있습니다.
PICNIC 문제를 풀고 있는데요. 아래 있는 코드는 짝을 찾을 때 중복으로 찾아야 하는 코드 입니다.
그런데 중복으로 찾지를 않더라구요.
왜냐면 areFriends[10][10]에 짝이 되어야 하는 친구들의 좌표에 true를 찍어주면 한번 찾습니다.
예를 들면 (0,1) 이 친구인데 areFriends에 [0][1]에 1을 찍어두면 [0][1]이 짝일때만 카운트 되더라구요.
원래는 중복으로 찾아서 2가 나와야되는데 어떻게하면 중복으로 되서 2가 나오는지 잘 모르겠습니다.
조언 부탁드립니다.
#include <iostream>
using namespace std;
int n;
int areFriends[10][10];
int countPairings(int* taken)
{
bool finished = true;
for (int i = 0; i < n; i++)
{
if (!taken[i]) finished = false;
}
cout << endl;
if (finished) return 1;
int ret = 0;
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
if (!taken[i] && !taken[j] && areFriends[i][j])
{
taken[i] = taken[j] = true;
ret += countPairings(taken);
taken[i] = taken[j] = false;
}
}
}
return ret;
}
void main()
{
int T;
int pair;
int x, y;
int v = 0;
int arr[10] = { false,false, };
freopen("input.txt", "r", stdin);
cin >> T;
for (int i = 0; i < T; i++)
{
cin >> n >> pair;
for (int j = 0; j < pair; j++)
{
cin >> x >> y;
areFriends[x][y] = true;
}
cout << countPairings(arr) << endl;
//init
for (int a = 0; a < 10; a++)
for (int b = 0; b < 10; b++)
{
areFriends[a][b] = 0;
}
}
}
krjj21
안녕하세요. 알고리즘 문제 해결 전략 책을 보고 공부하고 있습니다.
PICNIC 문제를 풀고 있는데요. 아래 있는 코드는 짝을 찾을 때 중복으로 찾아야 하는 코드 입니다.
그런데 중복으로 찾지를 않더라구요.
왜냐면 areFriends[10][10]에 짝이 되어야 하는 친구들의 좌표에 true를 찍어주면 한번 찾습니다.
예를 들면 (0,1) 이 친구인데 areFriends에 [0][1]에 1을 찍어두면 [0][1]이 짝일때만 카운트 되더라구요.
원래는 중복으로 찾아서 2가 나와야되는데 어떻게하면 중복으로 되서 2가 나오는지 잘 모르겠습니다.
조언 부탁드립니다.
10년 전