-1

チェス盤に 8 枚のクイーン (またはヴィジエ) を配置して、他のクイーンを処理できないようにしたい!
この写真のように

最初
は手続き的にやりたかったのですが、できないようです!
(100行にもなる!!(動いても!))

私のコード

def viz(a):
    for i in range(8):
        temp = []
        if(i == a or i == a - 1 or i == a + 1):
            continue
        temp.append(i)
    temp = set(temp)
    return temp
list1=[0]*8
for i in range(8):
    list1[i]=1
    a = viz(i)
    for j in a:
        list2[j]=1
        b = viz(j)
        for h in a.intersection(b):
            list3[h]=h
            tset = a.intersection(b)
            c = viz(h)
            for n in tset.intersection(c):
                list4[]
                .
                .
                .
        list2[j]=0
    list1[i]=0

オブジェクト指向スタイルも試してみましたが、うまくいきませんでした。

4

4 に答える 4

3

これは、考えられる多くの実装の1つです。

#! /usr/bin/python3.2

import itertools

def queens ():
    for p in itertools.permutations (range (8) ):
        yield [x for x in enumerate (p) ]

for q in queens ():
    err = False
    for a, b in ( (a, b) for a in q for b in q if a [0] < b [0] ):
        if abs (a [0] - b [0] ) == abs (a [1] - b [1] ):
            err = True
            break
    if not err: print (q)

92のソリューションすべてが得られます。

于 2013-02-03T09:40:37.100 に答える
0

非常に多くのモジュールを操作するのにちょっと問題があるので、これが私の答えです:

res = []
ill = []

def n_ligal(r,c):
    global ill
    a = 1
    while(r+a<8):
        ill.append((r+a,c))
        ill.append((r+a,c+a))
        ill.append((r+a,c-a))
        a += 1          
def r_iligal(r,c):
    global ill
    a = 1
    while(r+a<8):
        ill.remove((r+a,c))
        ill.remove((r+a,c+a))
        ill.remove((r+a,c-a))
        a += 1

def a():
    global i,j
    j = res.pop()
    i -= 1
    r_iligal(i,j)
    j+=1
    if(j==8):
        a()

i = 0
j = 0
while(i<8):
    while (j<8):
        if((i,j) not in ill):
            res.append(j)
            n_ligal(i,j)
            if(len(res) == 8):
                print(res)
            i += 1
            j = 0
            break
            elif(j==7):
                a()
            else:
                j += 1

print('Press Q to exit')
q = input()
if(q=='q'):
    raise SystemExit
于 2013-02-20T14:31:04.430 に答える
0

たった6行のPythonで問題を解決する1つの可能な解決策があります。

于 2013-02-03T09:33:55.680 に答える