hdu1016

来源:互联网 发布:java 文件上传md5校验 编辑:程序博客网 时间:2024/05/20 21:48

深搜


#include <iostream>
#include <string>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <map>
#include <iterator>
#include <cstring>
#include <cmath>


using namespace std;


int isprime(int n) {
    if (n==1) return false;
    if (n==2) return true;
    for (int i = 2; i*i <=n; i++)
        if (n%i==0) return false;
    return true;
}


int visited[21];
int ans[21];
int n;
//  dfs(n) to determine number with index n
//  all number are indexed by 0, 1, 2, ... ,n-1
void dfs(int num) {
    if (num == n && isprime(ans[num-1] + ans[0])) {
        for (int i = 0; i < num-1; i++)
            cout << ans[i] << " ";
        cout << ans[num-1] << endl;;
    } else {
        for (int i = 2; i <= n; i++) {
            if (!visited[i]) {
                if (isprime(i + ans[num-1])) {
                    visited[i] = 1;
                    ans[num++] = i;
                    dfs(num);
                    visited[i] = 0;
                    num--;
                }
            }
        }
    }
}


int main() {
    int num = 0;
    while (cin >> n) {
        num++;
        cout << "Case " << num << ":" << endl;
        memset(visited, 0, sizeof(visited));
        ans[0] = 1;
        dfs(1);
        cout << endl;
    }
    return 0;


}

0 0
原创粉丝点击