#define N 10 //10 데이터
#define M 5 //5 그룹
int limit[N][N]=
{
{1, n}, /0 limit 1;
{3, 5, 6, N}, //1 limit 3, 5. , 6;
{0, 1, 6, 7, N}, //2 limit 0, 1, 6, 7;
{1, 2, N}, //3 limit 1, 2;
{N}, //
{1, 2, N}, //5 limit 1, 2;
{2, N}, /6 limit 2;
{8, 9, N} , //7 limit 8, 9;
{5, 6, 7, N}, //8 limit 5, 6, 7;
{2, 8, N} //9 limit 2, 8.
};
M이 n을 제한하는지 결정합니다.
bool m_limit_n(int m, int n)
{
int I;
if (m & gt= N | | n & gt=N)
{
Return false
}
for(I = 0; I & ltN & amp& amp limit[m][I]& lt; n; i++)
{
if( limit[m][i]==n)
{
참을 반환
}
}
참을 반환
참을 반환
부울 값 유효 (int *arr)
{
int i, j;
for(I = 0; I & ltn; i = i+2)
{
if(arr[I] & gt; arr[i+1])
{
Return false
}
if(m_limit_n(arr[i], arr[(i+2)%N])
}}
|| m_limit_n(arr[i], arr[(i+3)%N])
||m_limit_n(arr[i+1], arr[(i+2)%N])
||m_limit_n(arr[i+1], arr[(i+3)%N])
{
Returns false
}
}
참을 반환합니다
void exchange(int *arr, int n, int m)
{
내부 온도;
temp = arr[n];
arr[ n] = arr[m];
arr[m] = temp;
}
int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
void perm(int* arr, int n, int curr)
{
int I.;
if(curr & gt; = n-1)
{
if(valid(arr))
{
for(I = 0; I& ltn; i=i+2)
{
printf("%d, %d", arr[i], arr[I+1]) ;
}
printf(" \ b \ n ");
}
}
Other
{
for(I = curr; I& ltn; i=i+1)
{
if(i==curr)
{ p>
perm(arr, n, curr+1);
}
p>
기타
{
exchange(arr, I, curr);
perm(arr, n, curr+1);
exchange(arr, I, curr) ;
}
}
}
int main()
{
perm(a, sizeof(a)/sizeof(a[0]), 0);
returns 0;
}
"제약 조건은 사례별로 결정되므로 프로그램에서 사용자에게 제약 조건을 입력하라는 메시지를 표시해야 합니다." 간단합니다. 직접 해보세요.