GOLDDLOG 2021-11-18 23:51 采纳率: 100%
浏览 29
已结题

八皇后问题这么写为什么错啊!!

题目描述:
一个如下的6×6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。
请输出前 3 个解。最后一行是解的总个数。


#include<iostream>
using namespace std;
int n;
int ans[15][2];
int dir[4][2]={-1,0,0,1,1,0,0,-1};
int count,sum; 
void dfs(int a=1,int b=1){
    for(int i=1;i<=count;i++){
        if(a==ans[i][0]||b==ans[i][1])
            return;
        int k=1.0*(ans[i][1]-b)/(ans[i][0]-a);
        if(k==1||k==-1)
            return;
    }    
    count++;
    ans[count][0]=a;
    ans[count][1]=b;
    if(count==n){
        for(int i=1;i<=n;i++)
        cout<<ans[i][1]<<" ";
        sum++;
        return;
    }
    for(int i=0;i<4;i++){
        a+=dir[i][0];
        b+=dir[i][1];
        if(a>=1&&a<=n&&b>=1&&b<=n){
        dfs(a,b);
        a-=dir[i][0];
        b-=dir[i][1];
    }
    }
}
int main(){
    cin>>n;
    dfs();
    cout<<sum;
    return 0;
} 
  • 写回答

1条回答 默认 最新

  • 关注

    参考下这个代码:

    #include<iostream>
    #include<cstdio>
    #include<vector>
    #define N 40
    using namespace std;
    bool vis[N]={0};
    bool vt[2][N]={0};
    int n=0;
    int p=13;
    int ret=0;
    vector<int> ans;
    void dfs(int x){
        if(x==n+1){
            ret++;
            if(ret<=3){
                for(int i=0;i<ans.size();i++){
                    if(i==0) printf("%d",ans[i]);
                    else printf(" %d",ans[i]);
                }
                printf("\n");
            }
        }
        for(int y=1;y<=n;y++){
            if(!vis[y]&&!vt[1][x+y]&&!vt[0][x-y+13]){
                vis[y]=vt[1][x+y]=vt[0][x-y+p]=1;
                ans.push_back(y);
                dfs(x+1);
                ans.pop_back();
                vis[y]=vt[1][x+y]=vt[0][x-y+p]=0;
            }
        }
    }
    int main(){
        cin>>n;
        dfs(1);
        printf("%d\n",ret);
        return 0;
    }
    

    img

    如有帮助,望采纳!谢谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月22日
  • 已采纳回答 11月22日
  • 创建了问题 11月18日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来