配对问题 小于10 1.3.5

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>

using namespace std;

int partner[100];
int N;

int total;
void dfs()
{
    int i;
    for(i=1; i<=N; i++)
        if(partner[i]==0) break;
    if(i > N)
    {
//        for(int i=1; i<=N; i++)
//            printf("%d - %d\n", i, partner[i]);
//        printf("\n");
        total++;
        return ;
    }
    for(int j=i+1; j<=N; j++)
    {
        if(partner[j]==0)
        {
            partner[i] = j;
            partner[j] = i;
            dfs();
            partner[i] = 0;
            partner[j] = 0;
        }
    }
}

int main()
{
    scanf("%d", &N);
    memset(partner, 0, sizeof(partner));
    total = 0;
    dfs();
    cout<<total<<endl;
    return 0;
}

 

posted @ 2016-02-12 12:08  xing-xing  阅读(115)  评论(0编辑  收藏  举报