藍橋杯 分考場(回溯)

2021-08-30 15:11:05 字數 887 閱讀 6148

問題描述

n個人參加某項特殊考試。

為了公平,要求任何兩個認識的人不能分在同乙個考場。

求是少需要分幾個考場才能滿足條件。

輸入格式

第一行,乙個整數n(1輸出格式

一行乙個整數,表示最少分幾個考場。

樣例輸入58

1 21 3

1 42 3

2 42 5

3 44 5

樣例輸出

樣例輸入510

1 21 3

1 41 5

2 32 4

2 53 4

3 54 5

樣例輸出

在已知狀態下,判斷當前學生能否分到已經存在的考場,如果不行就再開乙個教室。定義乙個二維陣列rela來表示兩個學生之間是否認識。定義乙個二維陣列now表示當前第i個考場中分到的學生的編號。定義乙個一維陣列cut表示當前第i個教室裡有多少個學生。

#includeusing namespace std;

int rela[105][105];

int now[105][105];

int cut[105]=;

int res=105;

int n,m;

void dfs(int id,int num)

for(int i=1;i<=num;i++)//遍歷當前開出的每個教室 }

//如果有乙個認識的,則重新開一間教室。

now[num+1][++cut[num+1]]=id;

dfs(id+1,num+1);

--cut[num+1];//回溯

}int main()

dfs(1,0);

cout

}

藍橋杯 分考場(回溯 dfs)

問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條件。輸入格式 第一行,乙個整數n 1輸出格式 一行乙個整數,表示最少分幾個考場。樣例輸入58 1 21 3 1 42 3 2 42 5 3 44 5 樣例輸出 樣例輸入510 1 21 ...

藍橋杯 歷屆試題 分考場 (dfs回溯)

題目連線 題意 很明顯了。思路 暴力搜尋 剪支 每新加進來乙個人,都與已經開設的教室裡面的人進行對比,如果找到乙個教室滿足,教室裡面所有的人都不和新加入的人認識,那麼就考慮將這個人加進來。再回溯。最後,當所有教室都不滿足的時候,新增教室。反思 dfs回溯有待提高 include using name...

藍橋杯分考場

因為資料量很小可以使用回溯演算法。應用兩層回溯 第一層回溯是將考生放在不同考場裡面產生的效果,比如學生3號可以放在教室1和教室2中那麼放在那乙個教室會產生更好的效果這是一層回溯。第二層回溯是考生放入以前的考場還是考生自己重新用乙個考場。比如考生3號可以放進教室1和教室2,也可以放進教室3。應用簡單的...