Lua第4版第2章课后答案

2.1

N=8
cnt1 = 0
function isplaceok(a,n,c)
    cnt1 = cnt1+1
    for i=1,n-1 do
        if(a[i]==c) or (a[i]-i==c-n) or (a[i]+i==c+n) then
            return false
        end
    end
    return true
end

function printsolution(a)
    for i = 1,N do
        for j=1,N do
            io.write(a[i]==j and "X" or "-"," ")
        end
        io.write("\n")
    end
    io.write("\n")
end
flag = false
function addqueue(a,n)
    if flag then
        return
    end
    if n>N then
        printsolution(a)
        flag = true
    else
        for c=1,N do
            if isplaceok(a,n,c) then
                a[n] = c
                addqueue(a,n+1)
            end
        end
    end
end
addqueue({},0 )
print(cnt1)

2.2

N=8
printCnt=0
isokCnt=0
times=os.clock()

function isplaceok(a,n,c)
    isokCnt=isokCnt+1
    for i=1,n-1 do
        if (a[i]==c)or(a[i]-i==c-n)or(a[i]+i==c+n) then
            return false
        end
    end
    return true
end

function printsolution(a)
    printCnt=printCnt+1
    for i=1,N do
        for j=1,N do
            io.write(a[i]==j and "X" or "-"," ")
        end
        io.write("\n")
    end
    io.write("\n")
end

book={0,0,0,0,0,0,0,0}
function addqueen(a,n)
    if n>N then
        for i=2,N do
            if isplaceok(a,i,a[i])==false then
                return
            end
        end
        printsolution(a)
    else
        for c=1,N do
            if book[c]==0 then
                a[n]=c
                book[c]=1
                addqueen(a,n+1)
                book[c]=0
            end
        end
    end
end

addqueen({},1)
print(printCnt)
print(isokCnt)
print(os.clock()-times)
发布了77 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Icecoldless/article/details/104071206