在二分图中有一个表示连接的二元方阵。问题是:是否存在所有行到列的一对一映射?(需要明确的是,如果我使用的语言错误,完全连接的图可以满足这个要求,因为我们不仅限于一对一的映射)。
我写了以下内容。有没有更快的方法来实现这一点?
/* Is there a one-to-one mapping possible with the given bipartite graph?
input: graph[a][b] = connected (1) or not (0)
return: 0=no 1=yes */
int one_to_one(int graph[SIZE][SIZE], int rows_checked /* =0 */, int col_chosen /* =0 */)
{
int my_graph[SIZE][SIZE], i, j, retval;
memcpy(my_graph, graph, sizeof(graph[0][0]) * SIZE * SIZE);
if (rows_checked > 0)
for (i=rows_checked; i<SIZE; i++)
my_graph[i][col_chosen] = -1; /* flag for "this column done" */
retval=1;
for (i=0; i<SIZE; i++) {
if (my_graph[rows_checked][i] == -1)
continue;
retval=0;
if (my_graph[rows_checked][i] == 1)
if (one_to_one(my_graph, rows_checked+1, i))
return 1;
}
return retval;
}