工作安排
题目
现在有n位工程师和6项工作(编号为0至5),现在给出每个人能够胜任的工作序号表(用一个字符串表示,比如:045,表示某位工程师能够胜任0号,4号,5号工作)。现在需要进行工作安排,每位工程师只能被安排到自己能够胜任的工作当中去,两位工程师不能安排到同一项工作当中去。如果两种工作安排中有一个人被安排在的工作序号不一样就被视为不同的工作安排,现在需要计算出有多少种不同工作安排计划。
输入描述:
输入数据有n+1行:
第一行为工程师人数n(1 ≤ n ≤ 6)
接下来的n行,每行一个字符串表示第i(1 ≤ i ≤ n)个人能够胜任的工作(字符串不一定等长的)
输出描述:
输出一个整数,表示有多少种不同的工作安排方案
输入例子:
6
012345
012345
012345
012345
012345
012345
输出例子:
720
分析:
根据输入的字符串创建二位数组,行为工程师,列为工作,可以做为true,不能做为false,进行深搜dfs,now==0时,所以人均以遍历完成,工作分配完成。
i从工作0到工作5进行遍历,创建数组vis存储已经分配出去的工作,true为已分配,false为未分配,当工作未分配且第now个人可以完成,vis[i]值给true,递归调用dfs给now-1个人分配工作,dfs结束,vis[i]给0,接着进行遍历。
代码如下:
1 |
|