摘要: 好久没写Dfs了,拿来练手。WA了一次,没有判断中间的情况……解法:先用Floyd传递闭包处理哪些点一定要在一起、哪些点一定不能在一起,六重循环。然后深搜,res[i][j]表示1,i这个物品在j这一行的匹配物品列编号。没有最优性剪枝,只有一堆可能性剪枝:(1)对于和(1,i)这个点关系为“一定在一起”的点(j,k),一定要将res[i,j]设置为k。(2)即将搜索res[i][j]为k的情况是否可能,那么条件就要是(j,k)这个点与(1,i)点的关系不是“不可能在一起”,而且(j,k)这个点与所有已经和(1,i)点匹配的点的关系不是“不可能在一起”。参考代码:program poj1683; 阅读全文