稳定的婚姻堆栈问题

时间:2015-06-02 03:28:29

标签: java algorithm

我需要帮助。我正在研究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;
                    }
                }
            }
        }

1 个答案:

答案 0 :(得分:0)

你的代码不清楚。但我认为你在错误的地方递减。 试试这个

for(int woman=0;woman<N;woman++){
        int preferenceplace = M[man-1][woman];