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


    问题描述

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

    程序代码
    #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;
    }
    
  • 相关阅读:
    volatile用法
    static用法
    sizeof用法
    C语言void关键字的深刻含义
    extern用法
    const用法
    attribute用法
    Task的运行过程分析
    Android BroadcastReceiver实例Demo(有序广播的发送)
    旅行-许巍
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/9349742.html
Copyright © 2020-2023  润新知