员工分配工作(深度优先)

题意:公司分配N项工作给N个员工,每个员工只能被分给1项工作,每个人处理工作的时间不同。求完成所有工作所需的最少时间。

输入:第一行输入整数N,代表N个员工,员工编号从1到N(1<=N<=10)

    接下来输入一个N*N的二维矩阵task[N][N],其中task[i][j](0<=task[i][j]<=1000)代表第i项工作由j号员工完成所需的时间。

输出:输出一个整数,代表工作完成所有工作所需的最少时间。

样例:

输入:

6
10 11 12 11 9 11
11 9 10 13 11 12
12 10 11 10 13 9
9 14 9 10 10 11
10 10 9 11 12 11
10 7 10 10 10 8

输出:

54

dfs暴力深搜(深度优先)

 1 #include<iostream>
 2 using namespace std;
 3 
 4 int task[15][15]; //
 5 bool used[15];
 6 int ans;
 7 int n;
 8 void dfs(int x,int t){
 9     if(x==n){
10         if(t<ans){
11             ans=t;
12         }
13         return;
14     }
15     for(int i=0;i<n;i++){
16         //判断员工是否被使用
17         if(!used[i]){
18             used[i]=true;
19             dfs(x+1,t+task[x][i]);
20             used[i]=false;
21         }
22     }
23 }
24 int main()
25 {
26     cin>>n;
27     for(int i=0;i<n;i++){
28         for(int j=0;j<n;j++){
29            cin>>task[i][j];
30         }
31     }
32     ans=200000;
33     //从第0行开始搜,刚开始花费时间为0
34     dfs(0,0);
35     cout<<ans;
36     return 0;
37 }

 

posted @ 2020-01-26 21:12  三行代码划江湖  阅读(374)  评论(0编辑  收藏  举报