[蘭橋杯パイソン] ルークの配置: n*n チェス盤では、各グリッドに最大 1 つのルークが配置され、2 つのルークが互いに攻撃できないようにする必要があります。中間配置方法 (ルークとルークの間) はいくつありますか) ありますか? 両者に違いはありません)

 【蘭橋杯ニシキヘビ】車の配置

1. リソースの制限

2. 入力形式

3. 出力形式

4. スタイルの入出力

5. コードと分析

これで完了です。書くのは簡単ではありませんが、成功したらフォローまたはいいねをお願いします。ありがとうございます〜


問題の説明

n*n チェス盤では、各グリッドに最大 1 つのルークが配置され、2 つのルークが互いに攻撃できないようにする必要があります。中間配置方法は何通りありますか (ルーク間に違いはありません)


1. リソースの制限

リソース制限

制限時間:1.0秒 メモリ制限:256.0MB

2. 入力形式

正の整数 n が含まれます

3. 出力形式

車を配置する方法の数を表す整数

4. スタイルの入出力

サンプル入力

2

サンプル出力

7

5. コードと分析

具体的な分析については、ここでは説明しませんので、コード内のメモを読んでください。

n = int(input())
result = 1
visited = [0] * n #记录这一行时候已经放置的棋子

def DFS(row,visited):
    global result
    if row >= n:
        return
    for i in range(n):
        if visited[i] == 0:
            visited[i] = 1
            result += 1
            DFS(row+1,visited) #该行放置了棋子,再找下一行
            visited[i] = 0
    DFS(row+1,visited) #不放棋子的情况

DFS(0,visited)
print(result)

結果:

 


 自分で書いたので少し複雑ですが、少なくともこれで完了です。最適化がある場合は、コメント欄で議論してください。

これで完了です。書くのは簡単ではありませんが、成功したらフォローまたはいいねをお願いします。ありがとう~~


おすすめ

転載: blog.csdn.net/Callme_TeacherPi/article/details/123856817