首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >产品房间的可能组合

产品房间的可能组合
EN

Stack Overflow用户
提问于 2015-07-03 07:04:16
回答 1查看 117关注 0票数 1

我有一种产品,有多种房间可供选择和定制。例如:

  • 一人房间
  • 双人房,配有特大床
  • 双人房,两张分开的床
  • 可容纳3人的房间

当客户订购一种产品(旅行)时,他会给我们一些参与者(例如:两个成年人和两个孩子.)

我必须让客户有能力选择各种房间的组合。以我们的例子来说,我们应该有:

  • 4间单人房
  • 一间一人房间,一间三人房间
  • 1间房,供2人使用,特大床+1间房,供2人单独使用
  • 2间配有特大床的双人房
  • 2个房间,供2人使用,隔开的床

在这个时候,我不知道该怎么办!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-03 07:20:43

这是子集和问题的一个变体(二维,成人和儿童),其中你的总和是人和孩子的数量,元素是房间。

尽管如此,你的问题似乎很小(你不会有几百个房间类型,只有几个房间,每个旅行者都会为很少的人预订房间),所以一个展示所有可能性的蛮力是解决问题的一种可能性。

这样做的想法是以递归的方式生成所有这样的房间,在向客户展示一种可能性之前,检查它是否满足需求。

递归算法将首先“猜测”如果您想使用当前的房间类型,并对两个选项-递归一个较小的问题。

类似Java的伪代码:

代码语言:javascript
运行
复制
private boolean matches(List<Room> rooms, int adults, int children) { 
    //check if the current list of rooms satisfies the demands
}
private int numPersons(List<Room> rooms) { 
    int res = 0;
    for (Room r : rooms) { 
        res += r.adults;
        res += r.children;
    }
    return res;
}

//wrapper function
public void generateAllPossibilities(List<Room> roomTypes, int adults, int children) { 
          generateAllPossibilities(roomTypes, adults, children, new ArrayList<>(), 0);
}

private void generateAllPossibilities(List<Room> roomTypes, int adults, int children, List<Room> soFar, int i) { 
    //check stop clauses, a "good" match, or out of bound:
    if (matches(soFar,adults,children)) {
         showOption(soFar); //succesful stop clause
         return;
    }
    if (i == roomTypes.size() || numPersons(rooms) > adults + children) {  
         return; //failing stop clause
    }
    //"guess" to add the current room type:
    soFar.add(roomTypes.get(i));
    //recurse with that guess:
    generateAllPossibilities(roomTypes, adults, children, soFar, i);
    //"guess" not to add the current room type
    soFar.remove(soFar.size()-1));
    generateAllPossibilities(roomTypes, adults, children, soFar, i+1);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31200608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档