問題大致如下:有n個學生參加考試,每個考場裡的任意倆學生都不能認識,求需要的最少的考場的數量
首先輸入學生數量n,輸入m;接下來m行,每行兩個資料i,j,表示i與j認識
樣例輸入:
5
81 2
1 31 4
2 32 4
2 53 4
4 5
其結果為4
首先如果是假如任何認識的學生在同一考場的話用並查集可以解決,但是這種問題怎麼解決剛開始有點懵逼,後來一想直接暴力解決不就行了嗎,遍歷每乙個房間,看看是否有房間可以放下這個學生,如果不行就在開乙個新的房間
**如下:
#include
#include
#include
#include
#include
using
namespace std;
#define maxn 100+1
bool know[maxn]
[maxn]=;
//標記認識的兩個人
bool room[maxn]
[maxn]=;
// room[i][j] = 1 表示第i個房間住第j號學生
void
dfs(
int&roomnumber ,
int stuid ,
int stunumber)}if
(ok)
else
if(room == roomnumber)
}dfs
(roomnumber, stuid +
1, stunumber);}
intmain()
int roomnumber =1;
int stuid =1;
int stunumber = n;
dfs(roomnumber , stuid, stunumber)
; cout << roomnumber << endl;
/*for (int i = 1;i <= roomnumber;i++)
} cout << endl;
}*/}
分考場 DFS 染色問題
資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條件。輸入格式 第一行,乙個整數n 1輸出格式 一行乙個整數,表示最少分幾個考場。樣例輸入58 1 21 3 1 42 3 2 4...
回溯 分考場
問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條件。輸入格式 第一行,乙個整數n 1輸出格式 一行乙個整數,表示最少分幾個考場。樣例輸入 5 81 2 1 31 4 2 32 4 2 53 4 4 5樣例輸出 4 樣例輸入 5 101...
回溯 分考場
問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條件。輸入格式 第一行,乙個整數n 1輸出格式 一行乙個整數,表示最少分幾個考場。樣例輸入58 1 21 3 1 42 3 2 42 5 3 44 5 樣例輸出 4樣例輸入510 1 21...