會場安排問題 C語言

2021-10-06 18:26:58 字數 1449 閱讀 6762

假設要在足夠多的會場裡安排一批活動,並希望使用盡可能少的會場.設計乙個有效的貪心演算法進行安排。

這個問題先要使用貪心演算法,那麼將所有活動用貪心演算法排一遍,然後將剩下活動裡剩下的活動繼續用貪心演算法解決,一直到把所有的活動都安排完。每用一次貪心演算法,會場數+1.直到吧活動安排結束。

使用貪心演算法的前提是:將活動按照活動結束時間非減序排列。

這樣就把整個問題解決了。

下面看看具體實現:

#include

#include

#pragma warning(disable:4996)

#define num 100

void

resort

(int

*f,int

*s,int n)}}

while

(i < n)

}void

greedy

(int

*f,int

*s,int

*c,int n1)

j++;}

if(*(f + n)

<=

*(s + i +1)

)else

} i =0;

while

(iprintf

("\n");

}int

getnumber

(int

*f,int

*s,int

*c,int n2)

if(jud == n2)

else

flag--;}

}int

main()

;int s[num]=;

int ci[num]=;

int num =1;

printf

("請輸入活動數目:");

scanf

("%d"

,&num)

;for

(int i =

0; i < num; i++

)resort

(f, s,num)

;printf

("需要%d個場地!\n"

,getnumber

(f,s,ci,num));

system

("pause");

return0;

}

大概講一下,這裡的f陣列表示,將活動結束時間存入。s陣列裡面存的是活動開始時間。

resort函式是對活動結束時間進行非減序排列。即f陣列按照增序排列,對應的也將s陣列改變順序。這樣就將活動排好序了。

ci陣列是用來表示對應下標的活動是否被安排,如果被安排,則將該下標ci元素置1,否則為0,。

這裡我使用了getnumber函式呼叫greedy函式。呼叫條件是:如果有n個活動,那麼ci陣列的前n項的和為n的話就會迴圈結束,得到會場數,否則就一直呼叫greedy函式。

這樣就寫完了這個題目。

會場安排問題 C

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 輸入第一行是乙個整型數m m 100 表示共有m組測試資料。每組測試資料的第一行是乙個整數n 1輸出 對於每一組輸入,輸出最多能夠安排的活動數量。每組的輸出佔一行 樣例輸入 2 21 10 10 11 31 10 10 11 11 2...

會場安排問題 C語言 貪心策略

題目描述 假設要在足夠多的會場裡安排一批活動,並希望使用盡可能少的會場。設計乙個有效的貪心演算法進行安排 解題思路 1.對活動進行排序,開始時間越早排在越前面,如果兩個活動時間相同,則結束時間越早的排在越前面 2.始時間最早和持續時間最短的優先安排會場,並記錄會場號,3.其餘活動的開始時間大於或等於...

會場安排問題

會場安排問題 問題描述 假設要在足夠多的會場裡安排一批活動,活動的開始時間和結束時間已知,並希望使用盡可能少的會場。設計乙個有效的演算法進行安排。分析 這個問題實際上是著名的圖著色問題。若將每乙個活動作為圖的乙個頂點,不相容活動間用邊相連。使相鄰頂點著有不同顏色的最小著色數,就對應要找的最小會場數。...