Techgig.com で問題を解決しているときに、ある問題にぶつかりました。問題は次のようなものです。
ある会社は、従業員のために年に 2 回の旅行を計画しています。彼らは、すべての従業員を旅行に派遣できるかどうかを知りたがっています。条件は、従業員が両方の旅行に行くことができないようなものです。また、どの従業員が一緒に働くことができるかを決定するための制約は、過去に一緒に働いた従業員が同じグループに属さないことです。問題の例:
作業履歴が次のように与えられているとします: {(1,2),(2,3),(3,4)}; その場合、4 人の従業員全員を 2 回の旅行 (従業員 1 と 3 で構成される 1 回の旅行と、従業員 2 と 4 で構成される旅行) で収容することができます。同じ出張に参加した 2 人の従業員は、過去に一緒に働いたことはありません。職歴が {(1,2),(1,3),(2,3)} の場合、会社の規則を満たし、全従業員を収容する 2 回の出張はあり得ません。
この問題の進め方を誰か教えてもらえますか?
このコードを DFS に使用し、頂点に色を付けています。
static boolean DFS(int rootNode) {
Stack<Integer> s = new Stack<Integer>();
s.push(rootNode);
state[rootNode] = true;
color[rootNode] = 1;
while (!s.isEmpty()) {
int u = s.peek();
for (int child = 0; child < numofemployees; child++) {
if (adjmatrix[u][child] == 1) {
if (!state[child]) {
state[child] = true;
s.push(child);
color[child] = color[u] == 1 ? 2 : 1;
break;
} else {
s.pop();
if (color[u] == color[child])
return false;
}
}
}
}
return true;
}