【算法】稳定匹配二(JAVA版)

详细介绍信息请看第一篇稳定匹配C++版这里不再过多讲述:

下文直接贴代码:

PiPei.java

package com.dt.pipei;

import java.util.Scanner;

public class Pipei {

    public static void main(String[] args) {

        System.out.println("请输入人数:");
        Scanner scanner=new Scanner(System.in);
        int NUM=scanner.nextInt();
        People man[]=new People[NUM];
        People lady[]=new People[NUM];

        //初始化男士心中女士的排名
        for(int i=0;i<NUM;i++) {
            man[i]=new People();
            int  a[]=new int[NUM];                                      //创建数组存放喜欢异性的排名
            for(int j=0;j<NUM;j++) {
                System.out.println("请输入第"+i+"名男士喜欢的第"+j+"名女士:");
                int lover=scanner.nextInt();
                a[j]=lover;
            }
            man[i].setRank(a);
        }
        //初始化女士心中男士的排名
        for(int i=0;i<NUM;i++) {
            lady[i]=new People();
            int a[]=new int[NUM];                                       //创建数组存放喜欢异性的排名
            for(int j=0;j<NUM;j++) {
                System.out.println("请输入第"+i+"名女士喜欢的第"+j+1+"名男士:");
                a[j]=scanner.nextInt();
            }
            lady[i].setRank(a);
        }
        boolean flag;
        while (true) {
            flag=true;
            //男士表白
            for(int i=0;i<NUM;i++) {
                if(man[i].getYuehui()==false) {
                    flag=false;
                    int location=man[i].getRank()[man[i].getBetter()];
                    man[i].setBetter(man[i].getBetter()+1);
                    if(lady[location].getYuehui()==false) {
                        man[i].setYuehui(true);
                        lady[location].setYuehui(true);
                        man[i].setPresent(location);
                        lady[location].setPresent(i);
                    }else if (lady[location].getYuehui()==true) {
                        int before = 0,latter = 0;
                        for(int j=0;j<NUM;j++) {
                            if(lady[location].getRank()[j]==i) {
                                latter=j;
                            }
                            if(lady[location].getRank()[j]==lady[location].getPresent()) {
                                before=j;
                            }
                        }
                        if(latter>before) {     //喜欢原来

                        }
                        if(before>latter) {     //喜欢小三
                            man[lady[location].getPresent()].setPresent(100);
                            man[lady[location].getPresent()].setYuehui(false);
                            lady[location].setPresent(i);
                            man[i].setPresent(location);
                            man[i].setYuehui(true);
                        }
                    }
                }
            }
            if(flag) {
                break;
            }
        }
        scanner.close();
        for(int i=0;i<NUM;i++) {
            System.out.println(i+"and"+man[i].getPresent()+"\n");
        }
    }
}

Person.java

package com.dt.pipei;

public class People {
    private Boolean yuehui;
    private String name;
    private int[] rank;
    private int present;
    private int better;

    public People() {
        yuehui=false;
        better=0;
        present=100;
    }

    public Boolean getYuehui() {
        return yuehui;
    }

    public void setYuehui(Boolean yuehui) {
        this.yuehui = yuehui;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }



    public int[] getRank() {
        return rank;
    }

    public void setRank(int[] a) {
        this.rank = a;
    }

    public int getPresent() {
        return present;
    }

    public void setPresent(int present) {
        this.present = present;
    }

    public int getBetter() {
        return better;
    }

    public void setBetter(int better) {
        this.better = better;
    }
}

运行结果:
这里写图片描述

Tony-Chen
2017.10.25

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值