A. 중학교 1,2,3학년 32명의 학생들이 수련회에 참석한다.

B. 32명의 참석자들을 6개조로 편성하고자 한다.

C. 같은 학년으로 조를 구성할 수 없다.

D. 참석자들은 같은 조가 되고 싶은 친구들을 우선순위 없이 최대 3명까지 적어 낼 수 있다.


이게 조건이구요.


출력결과는 아래와 같이 나와야 합니다.





저는 인접행렬을 활용해서 프로그램을 만들어보고자 


교재와 인터넷을 참고하여 아래와 같이 만들었는데....


그 이상 어떻게 해야 할 지 모르겠습니다.



할 줄 아는 분들께서는 조언 하나씩 던져주심 감사하겠습니다 ㅠㅠ















#include<stdio.h>


int func(int size, int M[10][10]);

int score;


int main(void)

{

int testcase;

int num, couple;

int t1, t2;

int A[10][10];


scanf("%d", &testcase);

for(int i=0; i<testcase; i++)

{

score = 0;

for(int j=0; j<10; j++)

{

for(int k=0; k<10; k++)

{

A[j][k]=0;

}

} //initialization


scanf("%d %d", &num, &couple);

for(int j=0; j<couple; j++)

{

scanf("%d %d", &t1, &t2);

A[t1][t2] = 1;

A[t2][t1] = 1;

} //matrix


func(num, A);

printf("%d\n", score);

}


return 0;

}


int func(int size, int M[10][10])

{

int M2[10][10];


if(size == 2)

{

if(M[0][0] == 0 && M[0][1] == 1 && M[1][0] == 1 && M[1][1] == score++);

}

return 0;

}


for(int i=0; i<size; i++)

{

if(M[0][i]==1)

{

for(int j=0; j<size-2; j++)

{

for(int k=0; k<size -2; k++)

{

if(j<=i&& k<=i)

{

M2[j][k]=M[j+1][k+1];

}

else if(j<=i && k>i)

{

M2[j][k]=M[j+1][k+2];

}

else if(j>i && k<= i)

{

M2[j][k] = M[j+2][k+1];

}

else if(j>i && k>i)

{

M2[j][k]=M[j+2][k+2];

}

}


}

func(size - 2, M2);

}

}

return 0;

}