4 条题解

  • 0
    @ 2023-11-11 10:53:05
    using namespace std;
    int a[6][6];//描述每个同学对书的喜好
    int book[6];//描述每本书的状态 0为没有被挑走了 1为被挑走 
    int c[6],sum=0;//保存每个同学拿到的书 c[1]=2 第一个同学拿到了2本书
    void dfs(int step){//给第step个同学挑书
    	if(step==6){//边界
    		sum++;
    		for(int i=1;i<=5;i++)
    			cout<<char(c[i]+64)<<" ";
    		cout<<endl;
    		return;
    	}
    	for(int i=1;i<=5;i++){//i表示书的编号,都去看下面的每本书
    		if(book[i]==0&&a[step][i]==1){//必须该本书没有被挑过,并且这个同学喜欢这本书
    			c[step]=i;//把书给同学
    			book[i]=1;//标记该书为已经挑过
    			dfs(step+1);//去下一个同学
    			book[i]=0;//回溯过来的时候,不要忘记把书收回了
    		}
    	}
    	return;
    }
    int main(){
    	for(int i=1;i<=5;i++)
    		for(int j=1;j<=5;j++)
    			cin>>a[i][j];
    	dfs(1);
    	if(sum==0) cout<<"no";
    	return 0;
    }
    

    信息

    ID
    1311
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    192
    已通过
    42
    上传者