寒假作业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<<"\ttime="<<p.time<<"\tfrom="<<p.from<<"\tto="<<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<<"\t"<<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]<<"\t";
	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);
 } 
posted @ 2018-02-10 00:26  fzu_Y  阅读(175)  评论(0编辑  收藏  举报