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;
    }
    
    • 0
      @ 2023-11-11 10:52:37

      #include<bits/stdc++.h> using namespace std; int a[6][6]; int book[6]; int c[6]; void dps(int step){ if(step==6){ for(int i=1;i<=5;i++) cout<<char(c[i]+64)<<" "; cout<<endl; return; } for(int i=1;i<=5;i++){ if(book[i]==0&&a[step][i]==1){ c[step]=i; book[i]=1; dps(step+1); book[i]=0; } } } int main(){ for(int i=1;i<=5;i++) for(int j=1;j<=5;j++) cin>>a[i][j]; dps(1); return 0; }

      • 0
        @ 2023-11-11 10:52:25

        #include<bits/stdc++.h> using namespace std; int a[6][6]; int book[6]; int c[6]; void dps(int step){ if(step==6){ for(int i=1;i<=5;i++) cout<<char(c[i]+64)<<" "; cout<<endl; return; } for(int i=1;i<=5;i++){ if(book[i]==0&&a[step][i]==1){ c[step]=i; book[i]=1; dps(step+1); book[i]=0; } } } int main(){ for(int i=1;i<=5;i++) for(int j=1;j<=5;j++) cin>>a[i][j]; dps(1); return 0; }

        • 0
          @ 2023-11-11 10:30:58

          这么简单!!!还需要看题解?!

          • 1

          信息

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