永发信息网

求C++的八皇后完整代码

答案:1  悬赏:20  手机版
解决时间 2021-04-04 12:27
要可以输出所有的摆放方法的那种,并且可以有一个变量来统计一共有多少种方法。
在网上看了很多都是输出一种方法就结束了。
要完整版的,而且麻烦看清楚是C++!其他语言不要贴出来。介绍书籍的也别来了。
最佳答案
// 首先你需要这些全局变量
// =====================================================================
// queen[i] = j 意思是第i个皇后在 (i,j),每行1个皇后
vector queen(8, 0); 
string line;   // 每个解法的每一行的排布
vector chessboard(0);   // 每种解法的排布
vector > AlltheSolutions(0);  // 装所有解法的容器
// ======================================================================
// show() 记录每个解法
void show(){        
    chessboard.clear();  
    for(int i = 0; i < 8; ++i){ 
    // '.' 是空地, 'Q' 是皇后的位置: "...Q...."  皇后在该行第4个位置
line.assign(8, '.');   
        line[queen[i]]='Q'; 
        chessboard.push_back(line);   
    }
    AlltheSolutions.push_back(chessboard);  
}

// 判断该位置是否能放皇后   
bool PLACE(int n){    
    for(int i = 0; i < n; i++) {
        // 查是否同列和对角线,同行不用查,因为设置的时候就默认一行一个
     if(queen[i] == queen[n] || abs(queen[i] - queen[n]) == (n - i)) 
         return false;
    }
    return true;  
}

// 回溯算法, 一行一行的摆
void NQUEENS(int n){  
    for(int i= 0; i < 8; i++){  
        queen[n] = i; 
        if(PLACE(n)){  
            if(n == 7) show(); // 并且已经是最后一个皇后了,把排布记录下来
         else NQUEENS(n + 1); // 不是就摆下一行
        }
    }
}

vector > solveNQueens() {
    NQUEENS(0);  
    return AlltheSolutions; 
}

// =================================================================
int main(){
    vector > result = solveNQueens();
    int num = 0;
    cout << "Total number of solutions is: " << result.size() << endl;
    cout << "which solution you want to look into? (No bigger than " << result.size() << ") \nSolution No.";
    cin >> num;
    for (int i = 0; i != result[num].size(); ++i){
        cout << result[num][i] << endl;
    }
    system("pause");
    return 0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
写出符合下列要求的物质的化学式:①能使高锰
相处的近义词。
航海王激战训练有什么作用
衔泥小筑怎么样
想学小提琴看不懂乐谱
惋惜什么意思!!!!!!!!急急急急急急急急急急
不是同一所大学的男生可以称呼为学长吗
长春师范大学是几本,山西临汾师范大学是一本
REVERSE FOR CARE 是何意思?快快帮我
甾怎么读音是什么
单选题下列表述不正确的一项是A.小说情节的运
葵花籽香味的烟是什么牌子的
什么叫绿色施工,有哪些要求
交往1年半男友为工作私自欠款20万,我该怎么办
有关毕节五城同创的英语作文
推荐资讯
两筐水果,甲筐比乙筐多30千克.乙筐卖出18千
在北方最受欢迎的男性身高是多高
购买小产权房有保障吗,想买块手表,懂行的可
we seem to be light on fuel. be light on m
有一首外国歌。 女声唱的。 什么“the搜别地
我家网络三个绿灯都有 为什么不能上
关于生态文明的格言,关于文明的名言警句
用石板代替瓷砖好不好
领取结婚证需要穿什么衣服好
美国地经济实力到地有多强
歌词中大概是:我以为真心可以换你的真情,,
有一部电影里有个叫卓文的是什么电影
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?