#include<stdio.h>
#define N 10 //å个æ°æ®
#define M 5 //äºä¸ªç»
int limit[N][N]=
{
{1,N}, //0éå¶1ï¼
{3,5,6,N}, //1éå¶3ã5ã6ï¼
{0,1,6,7,N},//2éå¶0ã1ã6ã7ï¼
{1,2,N}, //3éå¶1ã2ï¼
{N}, //
{1,2,N}, //5éå¶1ã2ï¼
{2,N}, //6éå¶2ï¼
{8,9,N}, //7éå¶8ã9ï¼
{5,6,7,N}, //8éå¶5ã6ã7ï¼
{2,8,N} //9éå¶2ã8ã
};
//å¤æmæ¯å¦éå¶n
bool m_limit_n(int m, int n)
{
int i;
if(m>=N || n>=N)
{
return false;
}
for(i=0;i<N && limit[m][i]<N;i++)
{
if(limit[m][i]==n)
{
return true;
}
}
return false;
}
bool valid(int *arr)
{
int i,j;
for (i = 0; i < N; i=i+2)
{
if(arr[i]>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]))
{
return false;
}
}
return true;
}
void exchange(int *arr, int n, int m)
{
int temp;
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>=n-1)
{
if(valid(arr))
{
for (i = 0; i < N; i=i+2)
{
printf("%d,%d ", arr[i],arr[i+1]);
}
printf("\b\n");
}
}
else
{
for (i = curr; i < n; i=i+1)
{
if(i==curr)
{
perm(arr, n, curr+1);
}
else
{
exchange(arr,i,curr);
perm(arr, n, curr+1);
exchange(arr,i,curr);
}
}
}
}
int main()
{
perm(a, sizeof(a)/sizeof(a[0]), 0);
return 0;
}
âéå¶æ¡ä»¶æ¯æ ¹æ®å®é
æ
åµå³å®çï¼å èè¦æ±ç¨åºè½ç»åºè®©ç¨æ·è¾å
¥éå¶æ¡ä»¶çæ示âå¾å®¹æï¼èªå·±ççåå§ã
温馨提示:答案为网友推荐,仅供参考