ISAQ @ 2023-04-07 09:21:09
n=int(input().strip())
a=[]
aa=[]
b=[]
c=[]
result=[]
for l in range(0,n):
for g in range(0,n):
aa.append(0)
b.append(aa)
aa=[]
num=0
def dfs(m):#a是标记数组,记录每一行棋子的位置,m指要确定哪一行的棋子位置
#确定每行棋子所在的位置
global a,b,n,num
for i in range(0,n):#i表示列
flag=0
if m>=n:#越界条件所有行都判断完
num+=1
if num<=3:
for h in range(0,n):
print(a[h],end=' ')
print('')
return
for q in range(0,n):
if b[m][q]==0:#m表示行,q表示列
flag=1#表示这一行有空着的点位,可以放棋子
break
if(flag==0):#第m行的点全部被ban,不可行,那么此时要返回上一步释放点位
return
if b[m][i]!=1:#如果该点没被ban则能取
#表示这一层ban之前的状态
aa=[]
c=[]
for l in range(0,n):
for g in range(0,n):
aa.append(b[l][g])
c.append(aa)
aa=[]
a.append(i+1)#表示第m行棋子的位置
# print(a)
b[m][i]=2
#ban点操作
j=m+1
while j<n :
b[j][i]=1
j+=1
k=1
while m+k<n and i+k<n:
b[m+k][i+k]=1
k+=1
k=1
while m+k<n and i-k>=0:
b[m+k][i-k]=1
k+=1
# print('ban点:')
# for o in range(0,n):
# print(b[o])
# print('\n')
else:
continue
dfs(m+1)
b=[]
aa=[]
for l in range(0,n):
for g in range(0,n):
aa.append(c[l][g])
b.append(aa)
aa=[]
a.pop()
dfs(0)
print(num)
by cornwave @ 2023-06-29 19:46:44
python的时间限制也是1s吗……如果是的话建议换c++
by ISAQ @ 2024-03-05 08:48:40
@cornwave 时间限制估计是一样的,不过要备赛蓝桥杯python组哈哈哈TvT