人员分配问题(简单的深度优先搜索题目)

问题描述

某单位有若干人员,现执行某任务需要一定人数人员。编写程序,输入单位人数和每位员工名字,再输入执行任务所需人数,输出所有可能派出人员方案

程序代码
#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;
}
原文地址:https://www.cnblogs.com/MartinLwx/p/9349742.html