Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- using namespace std;
- struct node{
- int number;
- int data;
- int start_time;
- int finish_time;
- };
- bool compareData( node a, node b ) {return a.data < b.data;}
- void ActivitySelection(int n , int s[] , int f[]);
- int main(){
- int n = 11;
- int s[n] = {1,3,0,5,3,5,6,8,8,9,12};
- int f[n] = {4,5,6,7,8,9,10,11,12,13,14};
- ActivitySelection(n,s,f);
- system("pause");
- return 0;
- }
- void ActivitySelection(int n , int s[] , int f[]){
- node array[n];
- int print[n] = {0};
- for(int i = 0 ; i < n ; i++){
- node temp;
- temp.number = i+1;
- temp.data = f[i] - s[i];
- temp.start_time = s[i];
- temp.finish_time = f[i];
- array[i] = temp;
- }
- sort(array, array + n, compareData);
- int duration = *max_element(f,f+n) - *min_element(s,s+n);
- bool ocupied[duration];
- for(int i = 0 ; i < n ; i++){
- ocupied[i] = false;
- }
- int count = 0;
- while(count < n){
- node temp_node = array[count];
- bool flag = true ;
- int change = 0;
- for(int i = temp_node.start_time+1 ; i <= temp_node.finish_time ; i++){
- if(ocupied[i] == true && flag == true){
- flag = false;
- change++;
- }
- else if(ocupied[i] == false && flag == false){
- flag == true;
- change++;
- }
- }
- if(flag == true && change == 0){
- print[count] = array[count].number;
- for(int k = temp_node.start_time ; k <= temp_node.finish_time ; k++){
- ocupied[k] = true;
- }
- }
- if(flag == true && change == 2){
- int f=0 , temp_s , temp_f , num;
- for(int k = temp_node.start_time ; k <= temp_node.finish_time ; k++){
- if(ocupied[k] = true && f == 0){
- temp_s = k;
- f++;
- }
- else if(ocupied[k] = false && f > 0){
- temp_f = k-1;
- }
- }
- for(int owow = 0 ; owow < n ; owow++){
- node owow_node = array[owow];
- if(owow_node.start_time == temp_s && temp_node.finish_time == temp_f){
- num = owow_node.number;
- break;
- }
- }
- for(int ohwow = 0 ; ohwow < n ; ohwow++){
- if(print[ohwow] == num){
- print[ohwow] == array[count].number;
- for(int k = temp_node.start_time ; k <= temp_node.finish_time ; k++){
- ocupied[k] = true;
- }
- }
- }
- }
- count++;
- }
- count = 0;
- for(int i = 0 ; i < n ; i++){
- if(print[i] != 0){
- count++;
- }
- }
- cout << count << "\n" << "(";
- sort(print,print+n);
- for ( int i = 0 ; i < n ; i ++ ) {
- if ( print[i] != 0 ){
- cout << print[i];
- cout << ",";
- }
- }
- cout << ")" << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement