CCF 2019-3-4 消息传递接口 100分

试题编号: 201903-4
试题名称: 消息传递接口
时间限制: 1.0s
内存限制: 512.0MB
问题描述:

CCF 2019-3-4 消息传递接口 100分_第1张图片

CCF 2019-3-4 消息传递接口 100分_第2张图片

CCF 2019-3-4 消息传递接口 100分_第3张图片

 

#include
#include
#include
using namespace std;

typedef struct Node{
	string type;//指令内容 
	int tar;//该指令的执行目标 
	string id;//所在进程的编号 
}Node;

int getNum(string s){//字符串转化为数字 
	int sum=0;
	for(int i=0;i q[10012];//一个队列表示一个进程 
int vis[10001]={0};//访问标记 
int T,n,flag=0;; 

int DFS(int u,int v,string find){
	vis[v]=1;
	while(!q[v].empty() && flag==0){//每次DFS都争取把队列走空 
		Node node=q[v].front();
		if(node.type==find){
			q[v].pop();
			q[u].pop();
			find="";//第一次匹配成功,find清空 
			fill(vis,vis+n,0);//恢复标记环境,从当前进行往别处找,fill的复杂度为O(1) 
		}else{
			string res;//记录要匹配的内容,例如0的R1要匹配1的S0 
			if(node.type[0]=='S')res="R";
			else res="S";
			res+=node.id;
			if(vis[node.tar]==0)DFS(v,node.tar,res);///若要放问的进程空闲,就执行DFS,往下匹配 
			else flag=1;//若要访问的进程正在等待,一定会死锁 
		}
	}
}

int main(){
	string s;
	cin>>T>>n;
	getline(cin,s);
	while(T--){
		for(int i=0;i=s.size())break;
				    if(s[b]==' ')break;
				    b++;
			    }
			    node.type=s.substr(a,b-a);
			    node.tar=getNum(s.substr(a+1,b-a-1));
			    q[i].push(node);
			    b++;a=b;
			}
		}
		DFS(0,0,"");
		int res=0;
		for(int i=0;i0){ //若有队列非空,则死锁 
				res=1;
				queue empty;//清空队列 
                swap(empty, q[i]);
			}
		}
		cout<

更多相关CCF的试题解答,请点击>>CCF历年认证考试解答

你可能感兴趣的:(CCF 2019-3-4 消息传递接口 100分)