代码展示:
N, M, L = list(map(eval,input().split()))
statements = [None]
for i in range(N):
statements.append(input())
no_solution = True
# print('N =', N,'\tM =', M, '\tL =',L)
# print('statements = ', statements)
def check(wolves_candidate):
is_wolvs = ['+'] * (N+1)
for i in wolves_candidate:
is_wolvs[i] = '-'
num_wolves_liars = count_total_liars(wolves_candidate,is_wolvs)
num_total_liars = count_total_liars(list(range(1,N+1)),is_wolvs)
if 1 <= num_wolves_liars < M and num_total_liars == L:
global no_solution
no_solution = False
return True
else:
return False
def count_single_liar(person,is_wolvs):
person_state = statements[person]
if is_wolvs[int(person_state[1:])] != person_state[0]:
return 1
else:
return 0
def count_total_liars(persons,is_wolvs):
total = 0
for person in persons:
total += count_single_liar(person,is_wolvs)
return total
def DFS(prior,ResN,ChosM):
if not no_solution:
return
if ResN < ChosM:
return
if ChosM < 1:
result = prior
# print(result)
if check(result):
result = list(map(str,result))
print(' '.join(result))
return
for i in range(ResN,0,-1):
DFS(prior+[i],i-1,ChosM-1)
def main():
DFS([],N,M)
global no_solution
if no_solution:
print('No Solution')
if __name__ == '__main__':
main()
测评结果: