uva331 - Mapping the Swap
题意不难理解,就是一个个排列排序的map的种数。
对于4 3 2 1 , 可见可以先对4 3 交换,或者对3 2 交换,或者对 2 1 交换。然后分情况依次交换,共有16种map。
还是回溯的简单利用。。。不难。。。
代码如下:
#include <cstdio>
int num[10], _case, n;
void swap(int a, int b)
{
int temp = num[a];
num[a] = num[b];
num[b] = temp;
}
void print_case(int cur)
{
int f = 1;
for(int i = 1; i < n; i++)
if(num[i-1]>num[i])
{ f = 0; swap(i-1,i); print_case(cur+1);swap(i-1,i); }
if(cur&&f) { _case++; return; }
}
int main ()
{
int Case = 0;
while(scanf("%d",&n)&&n)
{
for(int i = 0; i < n; i++) scanf("%d",&num[i]);
_case = 0;
print_case(0);
printf("There are %d swap maps for input data set %d.\n",_case, ++Case);
}
return 0;
}
浙公网安备 33010602011771号