檢查乙個如下的6 x 6的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行、每列有且只有乙個,每條對角線(包括兩條主對角線的所有平行線)上至多有乙個棋子。
上面的布局可以用序列2 4 6 1 3 5來描述,第i個數字表示在第i行的相應位置有乙個棋子,如下:
行號 1 2 3 4 5 6
列號 2 4 6 1 3 5
這只是跳棋放置的乙個解。請編乙個程式找出所有跳棋放置的解。並把它們以上面的序列方法輸出。解按字典順序排列。請輸出前3個解。最後一行是解的總個數。
輸入格式:
乙個數字n (6 <= n <= 13) 表示棋盤是n x n大小的。
輸出格式:
前三行為前三個解,每個解的兩個數字之間用乙個空格隔開。第四行只有乙個數字,表示解的總數。
·下面是本蒟蒻的**,跑了756ms
1 #include2view codeusing
namespace
std;
3bool d[100],column[100];4
int ans[100
],s,n;
5void dfs(int
x)18
}19 d[s1]=d[s2]=column[i]=0;20
}21}22
}23intmain()
24
·下面是一位學長的**,跑了672ms(比我的快←_←)
1 #include2view codeusing
namespace
std;
3const
int maxn=20,maxm=40;4
bool
column[maxn],l[maxm],r[maxm];
5bool
m[maxn][maxn];
6int n,ans=0,num=0;7
int dfs(intx)8
20for(int i=1;i<=n;i++)
2130
return
ans;31}
32int
main()
33
八皇后問題
八皇后問題 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...