我需要帮助。我正在研究Java中的Gale-Shapely Stable Marriage问题。代码如下。这是"分手和再婚"一部分。问题是一个幻影男人进入画面(我在堆叠上有0-9人,某个人10进入它)。我发现这是因为我把人的实际数字放入堆栈而不是他的位置(这是1的差异,即输入man1而不是man1的位置为0)。
但是,如果我通过放入应该存在的东西((temp-1))来解决这个问题,我会得到一个无限循环...下面是应该使用正确值的部分但是给了我一个无限循环。所以我的问题是:为什么减少温度不仅导致无限循环,而且导致荒谬的输出我不能在这里开始描述?如何将正确的值推送到堆栈?
public void Test(){
StdOut.println("Stack size = "+stack.size());
while(!stack.isEmpty()){
int man= stack.pop();
StdOut.println("man="+man);
for(int woman=0;woman<N;woman++){
int preferenceplace = M[man][woman];
if(statusW[(preferenceplace-1)]==0){
statusM[man] = preferenceplace;
statusW[(preferenceplace-1)] = (man+1);
break;
}
else{
if(statusW[(preferenceplace-1)]!=0){
int JonnyLately = findPref(N,man,woman);
int Fiance = findPref(N,statusW[preferenceplace-1],woman);
if(Fiance<JonnyLately){
// StdOut.println("She's happy. Move on");
}
else if(Fiance>JonnyLately){
int temp = W[woman][Fiance];
StdOut.println(temp+" is free now");
statusM[(temp-1)]=0;
stack.push((temp-1));
statusW[(preferenceplace-1)]=(man+1);
statusM[man]= preferenceplace;
}
}
}
}
答案 0 :(得分:0)
你的代码不清楚。但我认为你在错误的地方递减。 试试这个
for(int woman=0;woman<N;woman++){
int preferenceplace = M[man-1][woman];