在解决 Techgig.com 上的问题时,我对其中一个问题感到震惊。问题是这样的:
某公司每年为其员工组织两次旅行。他们想知道是否可以将所有员工都送去旅行。条件是,没有员工可以同时参加这两次旅行。此外,要确定哪些员工可以一起工作,限制条件是过去一起工作的员工不会在同一个组中。问题示例:
假设工作历史如下:{(1,2),(2,3),(3,4)}; 然后可以在两次旅行中容纳所有四名员工(一次旅行由员工 1 和 3 组成,另一次由员工 2 和 4 组成)。同一次旅行的两名员工过去都没有一起工作过。假设工作历史为 {(1,2),(1,3),(2,3)},那么不可能有两次满足公司规则并容纳所有员工的旅行。
谁能告诉我如何处理这个问题?
我将此代码用于 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;
}