存在表示二分圖中的連接的正方形二元矩陣。問題是:是否存在所有行到列的一對一映射? (要清楚的是,如果我使用的語言錯誤,完全連接的圖滿足此要求,因爲我們不僅限於一對一映射)。在二分圖中查找映射
我寫了以下內容。有沒有一個可笑的更快的方法來完成這個?
/* 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;
}
謝謝,這清除它,並給我一些選擇。我打算玩,看看什麼能夠提供最好的表現。 – 2011-05-06 22:11:25