文章

8

粉丝

14

获赞

7

访问

631

头像
八皇后 题解:无敌简短且易于理解的代码
P1265 北京大学/北京航空航天大学机试题
发布于2025年1月18日 20:26
阅读数 62

题目要求输出第t个串,则每次递归到n=8时,令t--,当t==0时,输出path所保存的路径。从第一行开始搜索,直到搜索完8行为止。搜索完8行,且是刚好第k次搜索完8行,则将路径打印出来并返回。下一轮搜索完8行,会让t再次减一,达到-1,此时可以做一个剪支,当t小于0时直接返回。

#include<bits/stdc++.h>

using namespace std;
const int N = 8;
int path[N];//保存搜索的路径

bool col[N],dia[2*N],udia[2*N];

void dfs(int u,int &t){
    if(t < 0) return;  //做一个剪支
    if(u == N){
        t --;
    }
    if(t == 0 && u == 8){
        for(int i = 0;i < N;i ++)
            cout<<path[i];
        cout<<endl;
        return ;
    }
    for(int i = 0;i < N;i ++){
        if(!col[i] && !dia[u+i] && !udia[i-u+N]){
            path[u] = i+1;  //保存路径,从1开始
            col[i] = dia[u+i] = udia[i-u+N] = true;
            dfs(u+1,t);
            col[i] = dia[u+i] = udia[i-u+N] = false; //恢复现场
        }
    }
}

int main(){
    int n;
    cin>>n;
    dfs(0,n);
    return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发