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;
}


posted on 2013-02-22 21:56  Primo...  阅读(118)  评论(0)    收藏  举报