员工分配工作(深度优先)
题意:公司分配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 }