赛尔号『修缘试炼·战斗试炼』参考攻略
赛尔号『修缘试炼·战斗试炼』参考攻略

标记限制:一共5行5列,共计25个格子,被划分为5个区域(划分类型一共20种),在每个区域内只有一处标记,5个标记在不同的行与列,并且不会在对角线上相邻(即每两个标记的行数差与列数差不同时为1)。

一共有20种情况,我把每种情况的标记点一一列出,供大家参考。




















大家可以根据不同的情况一一对照进行解谜。
当然,为了做这个攻略,我写了一段代码帮助我来摸鱼。
比如下面这种情况:

挑选4个区域输入对应坐标,输入两位数字来表示坐标,十位是行数,个位是列数,输入0结束当前区域录入,最后程序会自动寻找该游戏的解。

由于只是一个练手,就没写注释,随便写了写,也没注意什么格式。
Python代码如下:
part=[[],[],[],[],[]]
for i in range(4):
print('\n第' + str(i+1) + '区域方块:')
tmp=''
while tmp!='0':
tmp=input()
if tmp!='0':
part[i].append([int(tmp[0])-1,int(tmp[1])-1])
else:
print(part[i])
for i in range(5):
for j in range(5):
if [i,j] not in part[0] and [i,j] not in part[1] and [i,j] not in part[2] and [i,j] not in part[3]:
part[4].append([i,j])
print('\n第5区域方块:')
print(part[4])
print('\n')
def checkRow(r):
check=0
for i in r:
check=check+10**(i[1])
if check==11111:
return True
else:
return False
def checkPart(r):
check=[0,0,0,0,0]
for i in r:
for j in range(5):
if i in part[j]:
check[j]=check[j]+1
break
if check==[1,1,1,1,1]:
return True
else:
return False
def checkClose(r):
for i in range(4):
for j in range(i+1,5):
if abs(r[i][0]-r[j][0])==1 and abs(r[i][1]-r[j][1])==1:
return False
return True
def check(r):
return checkRow(r) and checkPart(r) and checkClose(r)
r=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1]]
result=[]
for a in range(5):
r[0]=[0,a]
for b in range(5):
r[1]=[1,b]
for c in range(5):
r[2]=[2,c]
for d in range(5):
r[3]=[3,d]
for e in range(5):
r[4]=[4,e]
if check(r):
print(r)
for i in range(5):
tmp=''
for j in range(5):
if [i,j] in r:
tmp=tmp+'■'
else:
tmp=tmp+'□'
print(tmp)
最后祝大家玩得开心,欢迎点赞、评论、转发,听说关注我的人都变帅了。
