CCF 消息传递接口 60分

大家不要看,我就是写个博客让别人给我找找错误。

#include
#include
#include
using namespace std;
const int MAXN = 10005;

/*
** 指令 
*/
struct Command{
	int process; //哪个进程的指令 
	char type; //指令类型(例如:S2中的S,R3中的R)。 
	int pid;   //指令对应的数字(例如:S2中的2,R3中的3)。 
	Command(int process,char type,char pid){
		this->process = process;
		this->type = type;
		this->pid = pid - '0';
	}
};
queue source[MAXN];  //进程的待处理指令集(包括R指令和S指令)。 

/*
** 处理R指令 
** 参数:
**		num: 哪个进程的R指令 
**      recIndex : R指令对应的进程编号
**      例如:3号进程执行R2指令,其中num=3,recIndex=2。 
*/
bool dealR(int num,int recIndex){
	/*
	** 查看recIndex对应的进程的第一条指令是不是:Snum (num是一个数字)。  
	** 举例:1号进程现在的指令是R2,那我就看看2号进程的第一条指令是不是S1。 
	*/
	if(source[recIndex].empty()){
		return false; //匹配失败 
	}
	Command command = source[recIndex].front();
	if(command.type == 'S' && command.pid == num){
		source[recIndex].pop();
		return true; //S指令和R指令匹配成功。 
	}else{
		return false; //匹配失败。 
	}
} 

/*
** 处理S指令 
** 参数:
**     sendNum: S指令的发送方
**     recNum:  S指令的接收方
**     例如:1号进程发送S3指令,其中sendNum=1,recNum=3。 
*/
bool dealS(int sendNum,int recNum){
	/*
	** 查看接收方(recNum)的当前指令是不是 : RsendNum (sendNum是个数字)
	** 举例:1号进程现在的指令是S2,那我就看看2号进程的第一条指令是不是R1。 
	*/
	if(source[recNum].empty()){
		return false; //匹配失败 
	}
	Command command = source[recNum].front();
	if(command.type == 'R' && command.pid == sendNum){
		source[recNum].pop();
		return true; //S指令和R指令匹配成功。 
	}else{
		return false; //匹配失败。 
	}
}

/*
** 判断各个进程的待处理指令集是不是空了 
*/
bool judgeEmpty(int n){
	for(int i=0;i>t>>n;
	getchar();
	while(t--){
		for(int i=0;i

 

你可能感兴趣的:(CCF,CCF)