Нужна помощь в решении этой проблемы с возвратом в python - PullRequest
0 голосов
/ 14 апреля 2020

Я столкнулся с проблемой, так как я довольно плохо знаком с рекурсией и возвращением. Это является частью задания, и я был бы признателен, если бы кто-то мог помочь, если мой подход к вопросу неправильный или мои циклы не выполняются должным образом

На выставке необходимо выделить киоски , Распределение должно соответствовать следующим условиям.

  • Всего три блока (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'])           

Мой вывод: enter image description here

...