cogs——66. [HAOI2004模拟] 数列问题

66. [HAOI2004模拟] 数列问题

本以为会TLE,可。。。

dfs水题(很基础)

#include<bits/stdc++.h>

using namespace std;

int x,shu[20],ans;

bool vis[20];

void print() {
    for(int i=1; i<=x; i++) printf("%d ",shu[i]);
    puts("");
    ++ans;
    return;
}

bool tp(int px){
    for(int i=2;i<=sqrt(px);i++)
        if(px%i==0) return false;
    return true;
}

void dfs(int k,int last) {
    if(k==x+1) {
        print();
        return;
    }
    for(int i=1; i<=x; i++) {
        if(last&&!(tp(last+i))) continue;
        if(!vis[i]) {
            vis[i]=1;
            shu[k]=i;
            dfs(k+1,i);
            vis[i]=0;
        }
    }
}

int main() {
    freopen("dfs3.in","r",stdin);freopen("dfs3.out","w",stdout);
    scanf("%d",&x);
    dfs(1,0);
    printf("%d
",ans);
    return 0;
}
原文地址:https://www.cnblogs.com/song-/p/9625422.html