Я столкнулся с проблемой, так как я довольно плохо знаком с рекурсией и возвращением. Это является частью задания, и я был бы признателен, если бы кто-то мог помочь, если мой подход к вопросу неправильный или мои циклы не выполняются должным образом
На выставке необходимо выделить киоски , Распределение должно соответствовать следующим условиям.
Всего три блока (A, B, C).
Есть шесть типов киосков. (продукты питания, косметика, одежда, игрушки, обувь, украшения).
(A) = (продукты питания, игрушки, обувь, украшения)
(B) = (игрушки, обувь, украшения).
- (C) = (продукты питания, косметика, одежда, игрушки, обувь, украшения).
- Блок A может иметь только те типы киосков, которые находятся в блоке C.
- в блоке C должны быть те типы киосков, которые находятся в блоке A.
- В киоске не должно быть типа Блок A, который существует в блоке B. Блок B может иметь максимум два типа киосков, общих для киосков
Мой код
# -*- coding: utf-8 -*-
"""
Created on Tue Apr 14 13:26:10 2020
@author: hassan
"""
blocks=['C','A','B'] #ordered the blocks based on the question Since C is a super set of A
stalls=['food','cosmetics','garments','toys','shoes','jewellery']
allocations={
'A':[],
'B':[],
'C':[]}
Climit=0
def validate_stall(curr_block,curr_stall):
global Climit
if curr_block=='A':
if curr_stall in allocations['B']:
return False
else:
if curr_stall in allocations['C']:
return True
if curr_block=='C':
return True
if curr_block=='B':
if curr_stall in allocations['A']:
return False
else:
if (curr_stall in allocations['C']) and (Climit<2):
Climit+=1
return True
return False
def evaluationFunction(curr_block,curr_stall):
if (validate_stall(curr_block,curr_stall)):
return True
else:
return False
def csp(index):
curr_block=blocks[index]
if(index==3):
return True
else:
for j in stalls:
if (evaluationFunction(curr_block,j)):
allocations[curr_block].append(j)
if(index+1)<3:
if(csp(index+1)):
return True
else:
if(index!=0):
allocations[curr_block].pop()
else:
x=0
if(index==2):
size_of_selection=len(allocations[curr_block])
if size_of_selection>=1:
while(x != size_of_selection):
allocations[curr_block].pop()
x+=1
return False
csp(0)
print("Group allocation is as followed : ")
print("A : " , allocations['A'])
print("B : ",allocations['B'])
print("C :" , allocations['C'])
Мой вывод: