1432 棋盤挑戰

2022-07-10 07:00:15 字數 2118 閱讀 5701

給定乙個 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來描述,該序列按順序給出了從第一行到第六行,每一行擺放的棋子所在的列的位置。

請你編寫乙個程式,給定乙個 n×n

'>n×n

的棋盤以及 n

'>n

n個棋子,請你找出所有滿足上述條件的棋子放置方案。

輸入格式

共一行,乙個整數 n

'>n

。輸出格式

共四行,前三行每行輸出乙個整數序列,用來描述一種可行放置方案,序列中的第 i

'>i

i個數表示第 i

'>i

i行的棋子應該擺放的列的位置。

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

一、第二、第三的方案。

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

資料範圍6≤

n≤13'>6≤n≤13

輸入樣例:

6
輸出樣例:
2 4 6 1 3 5

3 6 2 5 1 4

4 1 5 2 6 3

4

這題就是八皇后,就是輸出的時候需要注意一下格式,只需要我們輸出前三種方案和方案總數,那麼只需要在輸出的**前加上約束條件,if(ans<=3)時,進行輸出

八皇后的難點就是如何對不符合要求的格仔進行染色:

皇后所在的行和列以及斜邊不能夠有別的皇后在,否則便會相互攻擊到。

因為我們使用深搜的每一層遞迴相當於是一行,在每一次遞迴當中選中其中的一列,所以可以定義乙個r陣列和乙個c陣列以及l陣列和r陣列,相當於皇后所在的行和列以及斜邊上進行染色

對於斜邊 : y = kx+b; 等價於 b=y-kx; 需要注意的是 k=1或k=-1;

所以 b=y-x 或者 b=y+x

因為y-x有可能小於0,所以我們需要加上乙個引數把它的值調回正數

所以陣列染色的表示為 r[x] , c[i] ,l[y+x] ,r[y-x+10];

重申:r[x]表示這一行是否有皇后 、 c[i]表示這一列是否有皇后

因為本題對無解的n和n==1時沒有特殊要求,所以只需要考慮一般情況,具體**如下:

1 #include2 #include3 #include4

const

int n = 20;

5int

a[n];

6int

c[n],r[n],l[n],r[n];

7int

ans;

8intn;9

10 inline bool check(int x,int

y)15

16 inline void dfs(int

x)23 printf("\n"

);24}25

return;26

}2728for(int i = 1;i<=n;++i)39}

40}4142

43int

main()

44

1432 棋盤挑戰

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

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 個棋子,請你找出所有滿足上述...