蒜頭君在和朋友下西洋棋,下的時候突發奇想,在西洋棋棋盤的每個格仔上寫下 1 到 99 內的數字,又拿出了珍藏已久的 8 個皇后棋子。西洋棋中的皇后可以將同一行、同一列和同一對角線上的對方棋子吃掉。小蒜頭在想,怎麼擺放這 8 個皇后的位置才能讓她們不能互相攻擊,同時這 8 個皇后佔的格仔上的數字總和最大。
蒜頭君來求助熱愛演算法的你了,你能幫她算出答案嗎?
輸入格式
每個棋盤有 64 個數字,分成 8 行 8 列輸入,就如樣例所示。棋盤上每乙個數字均小於 100。
輸出格式
輸出乙個最大的總和
樣例輸入12
3456
78910
1112
1314
1516
1718
1920
2122
2324
2526
2728
2930
3132
3334
3536
3738
3940
4142
4344
4546
4748
4850
5152
5354
5556
5758
5960
6162
6364
樣例輸出
260
#include
using
namespace std;
int a[9]
[9], b[9]
[9]=
, max0 =
0, s =
0, y =1;
void
dfs(
)else
for(
int i =
1; i <=
8; i++)if
(y + i - j >=
1&& y + i - j <=8)
}for
(int j =
1; j <=
8; j++)if
(y + i - j >=
1&& y + i - j <=8)
} y++
;dfs()
; y = y0;
s = s0;
for(
int j =
1; j <=
8; j++)}
}}intmain()
八皇后問題
八皇后問題 ackarlix 八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯 1850 年提出 在 8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有 76種方案。1854 年在...
八皇后問題
include iostream.h int a 8 8 棋盤 int r 8 結果 int i,j int count 0 void init i j 0 int judge int x,int y for int mi x 1,mj y mi 1 mi for int ri x 1,rj y 1...
八皇后問題
package quess 由於八個皇后的任意兩個不能處在同一行,那麼這肯定是每乙個皇后佔據一行。於是我們可以定義乙個陣列columnindex 8 陣列中第i個數字表示位於第i行的皇后的列號。先把columnindex的八個數字分別用0 7初始化,接下來我們要做的事情就是對陣列columninde...