日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【蓝桥杯】8皇后·改

發布時間:2025/3/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【蓝桥杯】8皇后·改 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


參考博客:http://www.cnblogs.com/gaoteng/archive/2012/04/11/2442692.html


題目鏈接:http://lx.lanqiao.cn/problem.page?gpid=T374


問題描述 規則同8皇后問題,但是棋盤上每格都有一個數字,要求八皇后所在格子數字之和最大。 輸入格式 一個8*8的棋盤。 輸出格式 所能得到的最大數字和 樣例輸入 1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
48 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64 樣例輸出 260 數據規模和約定 棋盤上的數字范圍0~99
思考:解答本題首先得了解什么是8皇后(為此我百度了一下)。 8皇后:八皇后問題是一個以國際象棋為背景的問題,如何能夠在 8×8 的國際象棋棋盤上放置八個皇后,使得任何一個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處于同一條橫行、縱行或斜線上。 所以首先要做的就是先解決8皇后問題,即是8個皇后共有多少種不同的放法,解決此問題后,再在定義一個8*8的數組,將數據存起來然后比大小即可。 然后思考如何處理8皇后問題:第一行有8種放法,而每一種放法下一行又對應了8種放法(當然這里先不考慮此問題的規則)…… 那么層層放下去就會得到一個滿8叉樹,那么此問題就可以用樹形的思想去解決,用深度優先遞歸算法來對每一層進行遍歷(這時候按照規則排除不滿足的情況)。 那么接下來思考如何找出不滿足的情況: 問題要求8個皇后不能同時位于同列、同行、同斜線。這里我定義x數組,下標i表示行,值x[i] 表示在皇后放在 i 行所在的那一列,那么只要每一個皇后所處的 i 和 x[i],不同即可滿足不同行、不同列。至于同斜線,觀察可知位于同一斜線的兩個位置如i 行 j行?滿足等式abs(i-j) == abs(x[i] - x[j] )。故次8皇后的 問題可以解決了。 然后在每一個位置上放一個數比較相加即可,但是需要注意的一點是在每一下一次遞歸結束后應該把遞歸之前加的那個數減去然后在進行下一次遞歸。
代碼:#include<cstdio> #include<iostream> #include<cmath> #define M 8+1using namespace std; int x[M]; //下標表示皇后所在的行,x[i]表示皇后所在的列 int sum,maxNum; int ar[9][9]; //代表每個點的數值 int max(int n1, int n2){if(n1>n2) return n1;return n2; }bool isPlace(int k){//不能是同行或者同列 或者同對角線 for(int i=1; i<k; ++i){if(abs(i-k) == abs(x[k]-x[i]) || abs( x[i] == x[k] ) )return false;}return true; } void onTrace(int t){if(t>8){maxNum = max(maxNum, sum);}else{for(int i=1; i<=8; ++i){ //colx[t]=i;if(isPlace(t)){sum+=ar[t][i];onTrace(t+1);//遞歸完之后就會進行下一列遞歸,所以應該把前一列的那個數去掉 sum-=ar[t][i]; //important!! here, error more than once}}}} int main() {for(int i=1; i<=8; ++i){for(int j=1; j<= 8; ++j){scanf("%d", &ar[i][j]);}}maxNum=-1;onTrace(1); //printf("%d\n", maxNum);return 0; }





總結

以上是生活随笔為你收集整理的【蓝桥杯】8皇后·改的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。