我正在为课堂做一项作业,在那里我必须读取一个邻接矩阵并输出Java中的二分匹配。我得到了两种方法来完成这一任务,而且我成功地让它在一个用例中工作,但是我在让它为另外两个用例工作时遇到了一些困难。我将粘贴我的源代码在下面。在程序开始时有3个测试用例,每个测试用例的预期输出都显示在最后。
我需要将矩阵实现为二维字符数组。我遇到的问题似乎是它的回溯部分。第二个测试用例返回正确的结果。如果有人能帮我理解我做错了什么,我会非常感激的。我寻找匹配的过程是:
预期成果:
Case 1: No mathing exists.
There is no matching.
Case 2: Matching with no backtracking needed.
A matches to b
B matches to a
C matches to c
D matches to d
E matches to e
Case 3: Matching with backtracking.
A matches to a
B matches to d
C matches to b
D matches to c
E matches to e发布于 2015-02-17 17:03:21
您需要用以下内容替换findMatch:
public static boolean findMatch(char [][]M, int myRow)
{
if(myRow < 0)
return true;
for(int c = 0; c < M.length; c++)
{
if(M[myRow][c] == 'y' && !isTaken(M, myRow, c))
{
M[myRow][c] = 't';
if (findMatch(M, myRow-1))
return true;
M[myRow][c] = 'y';
}
}
return false;
}目前,您的代码将只尝试为每个元素找到第一个可能的匹配项。
要执行正确的回溯,您需要从循环内部调用递归函数,如果它找不到完全匹配,则需要测试下一个位置。
https://stackoverflow.com/questions/28566594
复制相似问题