Advertisement
mhdew

SJF non-preemptive

Dec 7th, 2019
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define vout(v) for(int i=0;i<v.size();i++){ cout<<a[v[i]].p; if(i==v.size()-1) cout<<endl; else cout<<" ";}
  6.  
  7. struct info
  8. {
  9.     string p;
  10.     int at, bt;
  11. };
  12.  
  13. bool cmp1(struct info a, struct info b){
  14.     return a.at<b.at;
  15. }
  16.  
  17. bool cmp2(struct info a, struct info b){
  18.     return a.bt<b.bt;
  19. }
  20.  
  21.  
  22. struct info a[11111];
  23. int n;
  24. vector<int> q;
  25.  
  26. void srt()
  27. {
  28.     for(int i=0;i<q.size();i++){
  29.         for(int j=i+1;j<q.size();j++){
  30.             if(a[q[i]].bt>a[q[j]].bt){
  31.                 swap(q[i],q[j]);
  32.             }
  33.         }
  34.     }
  35. }
  36.  
  37. int main()
  38. {
  39.     freopen("in.txt","r", stdin);
  40.     freopen("out.txt","w", stdout);
  41.  
  42.     cin>>n;
  43.     for(int i=0;i<n;i++){
  44.         cin>>a[i].p>>a[i].at>>a[i].bt;
  45.     }
  46.  
  47.     sort(a,a+n,cmp1);
  48.     sort(a+1,a+n,cmp2);
  49.  
  50.     vector<int> gc;
  51.     map<string,bool>mp;
  52.     vector<int> v[111];
  53.     q.push_back(0);
  54.     int timer=a[0].at;
  55.     int vi=0;
  56.     mp[a[0].p]=1;
  57.     while(q.size()>0){
  58.         srt();
  59.         int tp=q[0];
  60.         q.erase(q.begin());
  61.        
  62.         gc.push_back(tp);
  63.         v[vi].push_back(timer);
  64.         timer+=a[tp].bt;
  65.         v[vi].push_back(timer);
  66.         vi++;
  67.  
  68.         for(int i=0;i<n;i++){
  69.             if(mp[a[i].p]!=1){
  70.                 if(a[i].at<=timer){
  71.                     q.push_back(i);
  72.                     mp[a[i].p]=1;
  73.                 }
  74.             }
  75.         }
  76.     }
  77.  
  78.     cout<<"Gantt Chart"<<endl;
  79.     for(int i=0;i<gc.size();i++){
  80.         cout<<a[gc[i]].p<<" ";
  81.     }
  82.     cout<<endl<<endl;
  83.  
  84.     vector<int > wt;
  85.     vector<int> tt;
  86.     for(int i=0;i<n;i++){
  87.         int temp=v[i][0]-a[i].at;
  88.         wt.push_back(temp);
  89.     }
  90.  
  91.     for(int i=0;i<n;i++){
  92.         int temp=v[i][1]-a[i].at;
  93.         tt.push_back(temp);
  94.     }
  95.  
  96.     cout<<"P\tWT\tTT"<<endl;
  97.     for(int i=0;i<n;i++){
  98.         cout<<a[i].p<<"\t"<<wt[i]<<"\t"<<tt[i]<<endl;
  99.     }
  100.  
  101.     return 0;
  102.  
  103.  
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement