Find the MTH in the full arrangement of n numbers ,,
The order of deep search is the order of arrangement.
8! = 40320
Given m <= 10000, you only need to arrange eight numbers.
[Cpp]
# Include <stdio. h>
# Include <string. h>
Int m, n, count, num [9], k, link [9];
Void dfs (int u)
{
Int I;
If (count = m) return;
If (u = 9)
{
Count ++;
If (count = m)
{
If (n <= 8)
{
Printf ("% d", num [k + 1]-k );
For (I = k + 2; I <= 8; I ++)
Printf ("% d", num [I]-k );
Printf ("\ n ");
}
Else
{Printf ("1 ");
For (I = 2; I <= k; I ++)
Printf ("% d", I );
For (I = 1; I <= 8; I ++)
Printf ("% d", num [I] + k );
Printf ("\ n ");
}
}
}
For (I = 1; I <= 8; I ++)
{
If (link [I] = 0)
{
Link [I] = 1;
Num [u] = I;
Dfs (u + 1 );
Link [I] = 0;
}
}
}
Int main ()
{
Int I, j;
While (scanf ("% d", & n, & m )! =-1)
{
Memset (num, 0, sizeof (num ));
Memset (link, 0, sizeof (link ));
Count = 0;
If (n <8)
K = 8-n;
Else k = n-8;
Dfs (1 );
}
Return 0;
}
# Include <stdio. h>
# Include <string. h>
Int m, n, count, num [9], k, link [9];
Void dfs (int u)
{
Int I;
If (count = m) return;
If (u = 9)
{
Count ++;
If (count = m)
{
If (n <= 8)
{
Printf ("% d", num [k + 1]-k );
For (I = k + 2; I <= 8; I ++)
Printf ("% d", num [I]-k );
Printf ("\ n ");
}
Else
{Printf ("1 ");
For (I = 2; I <= k; I ++)
Printf ("% d", I );
For (I = 1; I <= 8; I ++)
Printf ("% d", num [I] + k );
Printf ("\ n ");
}
}
}
For (I = 1; I <= 8; I ++)
{
If (link [I] = 0)
{
Link [I] = 1;
Num [u] = I;
Dfs (u + 1 );
Link [I] = 0;
}
}
}
Int main ()
{
Int I, j;
While (scanf ("% d", & n, & m )! =-1)
{
Memset (num, 0, sizeof (num ));
Memset (link, 0, sizeof (link ));
Count = 0;
If (n <8)
K = 8-n;
Else k = n-8;
Dfs (1 );
}
Return 0;
}