1432 棋盤挑戰

2021-10-18 10:32:51 字數 1103 閱讀 4098

給定乙個 n×n 的棋盤,請你在上面放置 n 個棋子,要求滿足:

上圖給出了當 n=6 時的一種解決方案,該方案可用序列 2 4 6 1 3 5 來描述,該序列按順序給出了從第一行到第六行,每一行擺放的棋子所在的列的位置。

請你編寫乙個程式,給定乙個 n×n 的棋盤以及 n 個棋子,請你找出所有滿足上述條件的棋子放置方案。

輸入格式

共一行,乙個整數 n。

輸出格式

共四行,前三行每行輸出乙個整數序列,用來描述一種可行放置方案,序列中的第 i 個數表示第 i 行的棋子應該擺放的列的位置。

這三行描述的方案應該是整數序列字典序排在第

一、第二、第三的方案。

第四行輸出乙個整數,表示可行放置方案的總數。

資料範圍

6≤n≤13

輸入樣例:

6輸出樣例:

2 4 6 1 3 5

3 6 2 5 1 4

4 1 5 2 6 3

4解題思路:

n皇后問題,dg為主對角線,udg為副對角線,分別為對角線編號

主對角線 y = x +b , b為這個對角線不變的值,b = y - x ,為了防止負數給他加上 n

副對角線 y = -x + b, b = y+x

#include

#include

#include

#include

#include

using

namespace std;

#define n 15

int n;

int col[n]

,dg[n*2]

,udg[n*2]

;//dg為主對角線,udg為副對角線

int path[n]

,ans;

void

dfs(

int x)

//x為行

printf

("\n");

}return;}

for(

int y=

1; y<=n;

++y)

}return;}

intmain()

1432 棋盤挑戰

給定乙個 n n n n 的棋盤,請你在上面放置 n n 個棋子,要求滿足 1 2 3 4 5 6 1 o 2 o 3 o 4 o 5 o 6 o 上圖給出了當 n 6 n 6 時的一種解決方案,該方案可用序列2 4 6 1 3 5來描述,該序列按順序給出了從第一行到第六行,每一行擺放的棋子所在的列...

AcWing 1432 棋盤挑戰

給定乙個 n n的棋盤,請你在上面放置 n 個棋子,要求滿足 1 2 3 4 5 6 1 o 2 o 3 o 4 o 5 o 6 o 上圖給出了當 n 6n 6 時的一種解決方案,該方案可用序列2 4 6 1 3 5來描述,該序列按順序給出了從第一行到第六行,每一行擺放的棋子所在的列的位置。請你編寫...

Problem 棋盤挑戰

給定乙個 n n 的棋盤,請你在上面放置 n 個棋子,要求滿足 上圖給出了當 n 6 時的一種解決方案,該方案可用序列 2 4 6 1 3 5 來描述,該序列按順序給出了從第一行到第六行,每一行擺放的棋子所在的列的位置。請你編寫乙個程式,給定乙個 n n 的棋盤以及 n 個棋子,請你找出所有滿足上述...