int main() { int n,m,i,j,s,t; Jq jtm; Rw tm; Pq<Jq,Jcmp> js; Pq<Rw,cmp> ls; Pq<Rw,cmp2> jxls; while(1) { js.cls();ls.cls();jxls.cls(); printf("请输入机器数,然后回车:\n"); m = scan(); for(i = 1;i <= m;i ++) { jtm.pos = i; jtm.s = 0; js.push(jtm); } printf("请输入任务数,然后回车:\n"); n = scan(); srand(unsigned (time(NULL))); //printf("请输入n个任务开始的时间 + 需要必须处理时间\n"); printf("任务号 到达时间 必须处理时\n"); for(i = 1;i <= n;i ++) { //scanf("%d%d",&s,&t); s = rand()%100; t = rand()%100+1; //各个任务的到达时间 + 必须工作时间 s = 0; printf("%d %d %d\n",i,s,t); tm.si = s; tm.ti = t;tm.pos = i; ls.push(tm); } printf("任务 处理器 到达时间 处理时间\n"); for(i = 1;i <= n;i ++) { jtm = js.front(); //某个有空闲的处理器 js.pop(); if(jxls.empty()) //就绪队列是空的,那么处理器等待 { tm = ls.front(); if(tm.si > jtm.s) { jtm.s = tm.si; } } while(!ls.empty()) //取出所有到达的事务,存入就绪队列 { tm = ls.front(); if(tm.si <= jtm.s) { jxls.push(tm); ls.pop(); }else break; } //取出最大就绪事务,进行处理 tm = jxls.front(); jxls.pop(); printf("%-9d%-9d%-9d%-9d\n",tm.pos,jtm.pos,jtm.s,jtm.s+tm.ti); if(jtm.s < tm.si) jtm.s = tm.si; jtm.s += tm.ti; js.push(jtm); } while(!js.empty()) { jtm = js.front(); js.pop(); } printf("完成所有任务用时:%d\n",jtm.s); } return 0; }