分考場問題

2021-10-02 16:05:15 字數 1096 閱讀 9521

問題大致如下:有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...