問題描述
n個人參加某項特殊考試。
為了公平,要求任何兩個認識的人不能分在同乙個考場。
求是少需要分幾個考場才能滿足條件。
輸入格式
第一行,乙個整數n(1#include
#include
#include
#include
using
namespace std;
int n,m,ans=
9999
;//最小考場數預設9999
int g[
101]
[101];
//儲存兩人關係的鄰接矩陣
vector<
int> room[
101]
;//房間陣列 開闢101個房間
void
dfs(
int x,
int sum1)
//當前的第x個學生,當前的考場數
if(sum1>=ans)
//剪枝 如果當前考場已經比最小考場數大了,就不用往下進行安排了
return
;int i,j,flag;
for(i=
1;i<=sum1;i++)}
if(!flag)
//如果迴圈完這個考場都不認識
} room[sum1+1]
.push_back
(x);
//沒有辦法,新增考場 ,將它安排進新考場
dfs(x+
1,sum1+1)
;//再進行下一次搜素
room[sum1+1]
.pop_back()
;//回溯 ,不安排它
}int
main()
dfs(1,
0);//從第乙個學生開始進行搜尋(安排考場)
printf
("%d\n"
,ans)
;return0;
}
試題 歷屆試題 分考場
看的n不大,就100,我們想到直接暴力做,當然,最好還是剪枝一下,我這裡用了順序列舉,排序剪枝,中間判斷一下當前的考場數量比當前的ans是否大,如果大於等於了,就不用列舉,所以就兩次剪枝,我就過了 include include include include using namespace std...
試題 歷屆試題 分考場
問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條件。輸入格式 第一行,乙個整數n 1思路分析 此題是乙個圖的可著色優化問題.注意回溯的問題 和 使用剪枝避免超時問題.實現 include using namespace std con...
歷屆試題 分考場
問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條件。輸入格式 第一行,乙個整數n 1一開始以為是簡單的貪心問題,可不想一直正確率40 最後發現還是需要採用回溯,在剪枝下深度遍歷所有情況.include int pre 100 100 ...