回溯演算法 素數環 全排列

2022-07-11 17:30:21 字數 2097 閱讀 2536

"""

# @time : 2020/11/25

# @author : jimou chen

"""from math import sqrt

n = int(input())

num = [0 for _ in range(n + 1)]

flag = [0 for _ in range(n + 1)]

# 判斷素數

def prime(x):

for i in range(2, int(sqrt(x)) + 1):

if x % i == 0:

return 0

return 1

# x 是當前的數,v是滿足條件的前乙個數

def dfs(x, v):

if x == n + 1:

# 判斷最後乙個數和第乙個數之和

if prime(v + 1):

for i in range(1, n + 1):

print(num[i], end=' ')

print()

return # return的位置是和for同一級的

for i in range(1, n + 1):

if flag[i] == 0 and prime(i + v):

flag[i] = 1

num[x] = i

dfs(x + 1, i)

flag[i] = 0

num[1] = 1

flag[1] = 1

dfs(2, 1)

'''6

1 4 3 2 5 6

1 6 5 2 3 4

81 2 3 8 5 6 7 4

1 2 5 8 3 4 7 6

1 4 7 6 5 8 3 2

1 6 7 4 3 8 5 2

'''

'''

優化的話,可以使用素數表,這樣就不用每次都遍歷判斷了

'''k = 0

# 素數表,1表示素數

def prime_table(x):

global k

l = [1 for _ in range(x + 1)]

for i in range(2, x + 1):

for k in range(2, int(sqrt(i)) + 1):

if i % k == 0:

l[i] = 0

return l

prime = prime_table(n+100)

from math import sqrt

def isprime(num):

for i in range(2, int(sqrt(num)) + 1):

if num % i == 0:

return 0

return 1

def isprimecircle(box):

if box[0] != 1:

return 0

for i in range(len(box) - 1):

if isprime(box[i] + box[i+1]) == 0:

box.pop()

return 0

box.pop()

return 1

def backtrack(nums, box):

if (len(box) == len(nums)) and (isprimecircle(box) == 1):

print(box)

return

for i in nums:

if i in box:

continue

backtrack(nums, box)

box.pop()

while true:

try:

n = int(input())

b =

test = [_ + 1 for _ in range(n)]

backtrack(test, b)

except:

break

python回溯演算法全排列 回溯演算法 全排列

1 問題描述 對於給定的集合 a,其中的 n 個元素互不相同,如何輸出這 n 個元素的所有排列 全排列 時間複雜度為o 2n 例如 全排列 2 回溯演算法思想 這裡以 a 為例,來說明全排列的生成方法,對於這個集合,其包含 3 個元素,所有的排列情況有 3 6 種,對於每一種排列,其第乙個元素有 3...

素數環 回溯演算法

設計 這個素數環有20個位置,每個位置可以填寫1 20的整數,可以對每個位置從1搜尋 約束條件 1 與前面已經填寫的數不重複 2 與前乙個數的和為素數 3 最後乙個數與第乙個數的和為素數 在填寫第k個位置時,如果滿足約束條件,則繼續填寫k 1個位置 如果1 20都不滿足,就回溯到k 1個位置,從原來...

回溯演算法 全排列

1 問題描述 對於給定的集合 a,其中的 n 個元素互不相同,如何輸出這 n 個元素的所有排列 全排列 時間複雜度為o 2n 例如 全排列 2 回溯演算法思想 這裡以 a 為例,來說明全排列的生成方法,對於這個集合,其包含 3 個元素,所有的排列情況有 3 6 種,對於每一種排列,其第乙個元素有 3...