八皇后问题

实现了第一组满足条件数据的输出

#include <cstdio>

#include <string.h>

#include <cstdlib>

#include <cmath>

#include <ctgmath>

#include <iostream>

#include <vector>

using namespace std;



int main()

{

    

    int a[8] = {0};

    int b[15] = {0};

    int c[15] = {0};

    int j = 0;

    vector<int> m;

    vector<int>::iterator it;

    for(int i = 0; i <= 7; i ++){

        for(j = 0; j <= 7; j ++){

            if((a[j]==0) && (b[i+j]==0) && (c[i-j+7]==0) ){//这一点可以有皇后

                m.push_back(j);

                a[j]=1;

                b[i+j]=1;

                c[i-j+7]=1;

                break;

            }

        }

        //如果走完了还没有位置

    t1: if(j == 8){

            i--;

            int temp = m[i];

        //删除原来皇后的记录

            a[temp]=0;

            b[i+temp]=0;

            c[i-temp+7]=0;

            m.pop_back();

        

            for(j = temp +1; j <= 7; j ++){

                if((a[j]==0) && (b[i+j]==0) && (c[i-j+7]==0) ){//这一点可以有皇后

                    m.push_back(j);

                    a[j]=1;

                    b[i+j]=1;

                    c[i-j+7]=1;

                    break;

                }

            }

            if(j == 8) goto t1;

        }

    }

    

    for(it = m.begin();it!=m.end();it++) cout<< *it <<endl;

    

    return 0;

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值