C ++电影座位

时间:2012-09-24 04:54:31

标签: c++ stl vector permutation next

过去几天我一直在疯狂地试图找出这个座位分配问题,并想知道是否有人可以帮助我。

说明说:

假设一组n名学生一起到达课堂(或电影),并且确切地将n个座位连续地分成1排。考虑到座位的偏好,您需要确定学生可以坐多少人来满足偏好。

输入

输入将仅来自键盘。输入将包含多个测试用例。每个测试用例以两个整数0 <0开始。 n和0≤m,其中n是要坐的学生人数,m是首选项的数量。为简单起见,假设学生从0到n-1编号。然后在m行之后,每行描述一个偏好,其中一行由三个整数a,b和c组成,满足0≤a<1。 b&lt; n和0 < | C | &LT; ñ。如果c为正,则青少年a和b想要坐在最多的c座位上。如果c为负数,那么a和b想要至少坐在-c个座位上。输入的结束由包含n = m = 0的行发出信号。

输出

每个测试用例的输出是一行,包含满足所有输入约束的组的可能的座位排列数。

示例输入

3 1

0 1 -2

3 0

0 0

示例输出

2

6

#include <vector>
#include <algorithm>
#include <string>
#include <iostream>
#include <iterator>

using namespace std;


struct Preference
{
int a;
int b;                     //Struct with three preferences
int c;
};


int main()
{
int a,b,c,students,numpref;
int count = 0;

vector<Preference> prefs;              //Vector with struct to store preferences
Preference case1;

cout<<"Enter number of students and preferences: ";
cin>>students>>numpref;          //Total Number of students and preferences are entered



for(int i = 0; i<=numpref; i++)
{
cin>>case1.a>>case1.b>>case1.c;
prefs.push_back(case1);                  //Stores preferences in vector
cout<<endl;
}

vector<int> v2(a);               //Second vector created to store list of students

sort(v2.begin(), v2.end());

while(next_permutation(v2.begin(), v2.end()))  
                                  //Finds all permutations of student seating
{


}


system("PAUSE");
return 0;
}

我知道它不完整,但我主要试图弄清楚如何将每行首选项与正确的排列进行比较,然后计算结果。我考虑将用户放置的向量中的每个元素的位置作为输入(例如:在示例中为0,1),并检查找到的每个排列是否具有0和1,它们之间至少有2个座位。但那只是行不通。

1 个答案:

答案 0 :(得分:1)

你认为算法可以工作,但速度很慢。我在你的不完整代码中发现了一些错误。

for(int i = 0; i<=numpref; i++) 

我认为这应该是

for(int i = 0; i<numpref; i++)