1 条题解

  • 0
    @ 2025-4-12 21:33:38

    C++ :

    #include<cstdio>
    #include<iostream>
    #include<cstdlib>
    using  namespace std;
    int  book[6],c;
    bool flag[6],like[6][6]={{0,0,0,0,0,0},{0,0,0,1,1,0},{0,1,1,0,0,1},
                                        {0,0,1,1,0,0},{0,0,0,0,1,0},{0,0,1,0,0,1}};;
    char s[5][20]={"Student Zhang","Student Wang","Student Liu","Student Sun","Student Li"};
    int  search(int);
    int  print();
    int  main()
    {
      for (int i=1;i<=5;i=i+1) flag[i]=1;
      search(1);                                    //从第1个开始选书,递归。
      return 0;
    } 
    int search(int i)                              //递归函数 
    {
      for (int j=1;j<=5; j++)                   //每个人都有5本书可选
      if (flag[j]&&like[i][j])                      //满足分书的条件
      {
        flag[j]=0;                                    //把被选中的书放入集合flag中,避免重复被选
        book[i]=j;                                   //保存第i个人选中的第j本书
        if (i==5) print();                          //i=5时,所有的人都分到书,输出结果
           else search(i+1);                    //i<5时,继续递归分书
        flag[j]=1;                                    //回溯:把选中的书放回,产生其他分书的方案
        book[i]=0;
      }
      return 0;
    }  
    
    int print()
    {
      c=c+1;                                                                //方案数累加1
      cout <<"answer " <<c <<":\n";  
      for (int i=1;i<=5;i=i+1)
        cout <<s[i-1]<<":" <<char(64+book[i]) <<endl;  //输出分书的方案
    	return 0;
    }
    
    
    • 1

    信息

    ID
    394
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者