排班系统部分代码求解释

if(person==7){
n++; show(); return;}
for(int j=0;j<7;++j){
if(rest[person][]==1&&judge(person,j)){
rest[person][i]=8; dfs(person+1); rest[person][i]=1;

if(person==7){ //如果已经安排了7个人的休息日
n++; //记录排班方案的数量
show(); //显示当前的排班表
return; //返回上一层递归
}
for(int j=0;j<7;++j){ //遍历每一天
if(rest[person][j]==1&&judge(person,j)){ //如果rest[person][j]==1,并且满足其他条件
rest[person][j]=8; //将rest[person][j]赋值为8
dfs(person+1); //递归安排下一个人的休息日
rest[person][j]=1; //回溯,恢复未安排状态
}
}


if (person == 7) {  // 如果person等于7
    n++;  // n加1
    show();  // 调用show函数
    return;  // 结束当前函数
}

for (int j = 0; j < 7; ++j) {  // 循环j从06
    if (rest[person][] == 1 && judge(person, j)) {  // 如果rest[person][]等于1并且judge(person, j)返回true
        rest[person][i] = 8;  // 将rest[person][i]赋值为8
        dfs(person + 1);  // 递归调用dfs函数,person加1
        rest[person][i] = 1;  // 将rest[person][i]恢复为1
    }
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7465336
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:用迭代法求斐波那契数列
  • 除此之外, 这篇博客: 函数调用不添加括号代表什么?中的 回调函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    回调函数的具体定义比较拗口,比较难以理解,因此比较生动的例子就是:小明到小红店里去购物,但是小红家恰好没货,因此小明留下了联系方式,等进货之后联系小明来购物

    更加清晰的解释为:如果将函数指针作为参数被传递到函数中,当这个函数指针被用于调用其指向的函数时,我们就称这个函数为回调函数

    回调函数的主要优势是解耦,即调用者和被调用者被分开,调用者无需了解谁是被调用者,它只需知道如果满足某条件之后,函数将被调用

  • 您还可以看一下 Chris老师的大厂算法面试真题解析课程中的 链表的局部翻转小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^