有 1 个候选人要接受 n 个面试官的面试,因此总共需要 n 个连续的位置,例如下表说明了四个面试官(I1、I2、I3、I4)在四次时间的可用性插槽(S1、S2、S3、S4)。表中的 1 表示对应的面试官在对应的时间段有空。
例如,第一个采访者 I1 在时间段 S1 和 S2 可用。
每位面试官只能接受一次面试,所有四个时段都应依次进行,如 S1->S2->S3->S4
在每个位置找到面试官的所有可能组合。图中就是这样一个例子,
算法
让我们拿三组(挖掘和算法是不同的)
s1 = array("I1","I2","I3")
s2 = array("I1","I2")
s3 = array("I2","I3")
interviewr_slot = array('slot1'=>s1,'slot2'=>s2,'slot3'=>s3,'slot4'=>null)
count = 3 //it can be any
stack = array()
possibility = array()
traced = array();
myoutput = rec_function(interviewr_slot)
function rec_func($interviewr_slot){
static slot = 0;
slot++;
possibility = interviewr_slot['slot']
if(possibility != null)
{
push(stack,traced)
reset(our_input);
our_input = array();
for( i = slot; i<= n+1, i++)
{
our_input[sloti] = si;
}
foreach(possibility as k=>v)
{
if(!in_array(v, trace))
{
array_push(traced, v)
rec_func(our_output)
}
}
}
else
{
push(output_array,traced)
}
slot--
traced = pop(stack)
our_output = json.stringify(output_array)
return our_output
}