• 寒假作业2_电梯


    目前想法:
    2月9日更新
    暴力回溯搜索嵌套,遍历所有载客顺序 载客方案 记录最优解
    把5个输入数据看成5名乘客,用回溯生成5名乘客的接客顺序
    然后按照生成的顺序去载客,载客后有两种选择,一是去下个预订地方进行载客,二是送当前电梯里的一名客
    送完客有两种选择,一是如果电梯内还有客人送一名客人,二是去下个地方载客

    写了好久,现在在送客的子函数出了bug 后面再写

    2月11日更新
    还没完成 现在的框架都还没搭好 得不到想要的输出
    deadline马上到了 未完成品也不好意思交github 就把未完成品放在这了

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<math.h> 
    #define NUMM 3
    using namespace std;
    int inorder[NUMM*2];
    int tmptime=0;
    int tmptottime=0;
    int result_time=0x7fffffff; 
    bool usedorder[NUMM*2];
    struct data
    {
    	int num,time,from,to;
    }wait[NUMM*2],on[NUMM*2],deliver[NUMM*2];
    void print(data p)
    {
    	cout<<"num="<<p.num<<"	time="<<p.time<<"	from="<<p.from<<"	to="<<p.to<<endl;
    	return ;
    }
    bool delivered[NUMM*2];
    int waitnum;
    void solve2(int k,int floor,int onnum,int dn);
    void solve3 (int k,int floor,int onnum,int dn,int tmpnum)//回溯 送电梯的客 
    {
    	
    	for(int i=1;i<=tmpnum;i++)
    	{
    		if(!delivered[i])
    		{
    			onnum--;dn++;
    			
    			cout<<"送"<<on[i].num<<"	"<<onnum<<endl;
    			delivered[i]=true;
    			solve3(k,floor,onnum,dn,tmpnum);
    			solve2(k+1,floor,onnum,dn);
    			delivered[i]=false;
    			dn--;
    		}
    	}
    } 
    void solve2(int k,int floor,int onnum,int dn)//dfs 接客 
    {
    	if(k>NUMM)return ;
    	cout<<"接"<<inorder[k]<<"	";
    	onnum++;
    	on[onnum]=wait[inorder[k]];
    	//print(wait[inorder[k]]);
    
    	if(k<NUMM)solve2(k+1,floor,onnum,dn);
    	memset(delivered,0,sizeof(delivered));
    	solve3(k,floor,onnum,dn,onnum);cout<<endl<<endl;
    	 
    	 	
    	 
    }
    void solve1(int k)//回溯生成所有载客顺序 
    {
    	for(int i=1;i<=NUMM;i++)
    	{
    		if(!usedorder[i])
    		{
    			inorder[k]=i;
    			usedorder[i]=true;
    			if(k==NUMM)//完成生成载客顺序
    			{
    				
    				memset(on,0,sizeof(on)); 
    				memset(deliver,0,sizeof(deliver));
    				memset(delivered,false,sizeof(delivered));
    				
    				waitnum=NUMM;
    				
    				solve2(1,1,0,0);
    			 } 
    			else solve1 (k+1);
    			usedorder[i]=false;
    		}
    		
    	}
    }
    int main()
    {
    	for(int i=1;i<=NUMM;i++)
    	{
    		cin>>wait[i].time>>wait[i].from;
    		int tmpto;cin>>tmpto;
    		if(tmpto==0)wait[i].to=10;
    		else wait[i].to=1;
    		wait[i].num=i;
    	}
    	for(int i=1;i<=NUMM;i++)
    	{
    		print(wait[i]);
    	}
    	memset(inorder,0,sizeof(inorder));
    	memset(usedorder,0,sizeof(usedorder));
    	solve1(1);
     } 
    
  • 相关阅读:
    MySQL5.6 GTID、多线程复制
    WPS for Linux(ubuntu)字体配置(字体缺失解决办法)
    linux下用phpize给PHP动态添加扩展
    Zabbix汉化方法
    [FTP] Pure-FTPd SSL/TLS 配置方法
    PHP 缓存扩展opcache
    sftp搭建
    nginx https使用
    iptables基本规则
    kvm虚拟机安装
  • 原文地址:https://www.cnblogs.com/fzu-031702148/p/8437474.html
Copyright © 2020-2023  润新知