人员分配问题(简单的深度优先搜索题目)
Posted martinlwx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了人员分配问题(简单的深度优先搜索题目)相关的知识,希望对你有一定的参考价值。
问题描述
某单位有若干人员,现执行某任务需要一定人数人员。编写程序,输入单位人数和每位员工名字,再输入执行任务所需人数,输出所有可能派出人员方案
程序代码
#include<bits/stdc++.h>
using namespace std;
char s[10][20]; //存放读进来的人的名字,暂定人最多为10个
char ans[10][20]; //存放每一次生成的结果
int maxMan = 0; //存放执行任务所需人数
int times = 0; //存放总方案数
int n;
void print(char s[][20])
{
times++;
cout<<"这是第"<<times<<"种方案"<<endl;
for(int i=1;i<=maxMan;i++)
cout<<ans[i]<<" ";
cout<<endl;
} //找到一个符合的答案后打印到控制台
void dfs(int depth,int index)
{
if(index==(maxMan+1))
{
print(ans);
return;
} //如果大于所需执行任务的人数则说明已经找到一个组合
for(int i=depth;i<=n;i++) //从depth开始时为了不会用到前面重复的元素
{
strcpy(ans[index],s[i]);
dfs(i+1,index+1); //递归搜索
}
} //深度优先搜索
int main()
{
cout<<"请输入员工的人数:";
cin>>n;
for(int i=1;i<=n;i++)
{
cout<<"请输入第"<<i<<"个员工的姓名:";
cin>>s[i];
} //读入所有人的名字
cout<<"请输入执行任务所需人数:";
cin>>maxMan;
dfs(1,1);
cout<<"共"<<times<<"种方案" <<endl;
return 0;
}
以上是关于人员分配问题(简单的深度优先搜索题目)的主要内容,如果未能解决你的问题,请参考以下文章