87分超时,,,
查看原帖
87分超时,,,
340222
代码练习生楼主2020/7/29 20:33
#include<stdio.h>

int poss[20],k=0;

int
check(int index,int n,int i){
    int j,k=0;
    
    for(j=index-1;j>0;j--){
        k++;
        if(poss[j]==i || poss[j]==i-k || poss[j]==i+k)
            return 0;
    }
    return 1;
}

void
dfs(int n,int index){
    int i;
    
    if(index>n){
        if(k<3){
            for(i=1;i<=n;i++){
                printf("%d ",poss[i]);
            }
            printf("\n");
        }
        k++;   
        return ;
    }
    
    for(i=1;i<=n;i++){
        if(check(index,n,i)){
            poss[index]=i;
            dfs(n,index+1);
        }
    }
}

int
main(){
    int n;
    
    scanf("%d",&n);
    dfs(n,1);
    printf("%d",k);
    return 0;
}
2020/7/29 20:33
加载中...