稳定婚姻匹配 G-S算法 JAVA和C++实现

稳定婚姻匹配问题

要求

输入:

(第一行数据表示 Man(Woman)的数目 n;接下来的数据中,第一个 n*n 的数据
块表示 Man 的优先列表;另一个 n*n 的数据块表示 Woman 的优先列表)
5 ———————- (Man(Woman)的数目 n)
2 1 4 5 3 ————– (第一个男人的优先列表)
4 2 1 3 5
2 5 3 4 1 ————– (第三个男人的优先列表)
1 4 3 2 5
2 4 1 5 3
5 1 2 4 3 ————– (第一个女人的优先列表)
3 2 4 1 5
2 3 4 5 1
1 5 4 3 2
4 2 5 3 1

输出

男人 1 到 n 的匹配对象,每个数字后边跟一个空格,最后输出一个\n。

JAVA实现

package gs;

import java.util.Arrays;
import java.util.Scanner;

public class gsalg {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        Woman women[] = new Woman[num];
        Man men[]= new Man[num];

//      System.out.println("num= "+num);

        for(int i=0;i<num;i++){

//          System.out.println("输入第 "+(i+1)+"个男人心中的优先顺序");

            int[] a=new int[num];
            for(int j=0;j<num;j++){
                a[j]=sc.nextInt();
            }
            men[i]=new Man();   //必须先初始化
            men[i].setRank(a);

//          System.out.println(Arrays.toString(men[i].rank));
        }

        for(int i=0;i<num;i++){

//          System.out.println("输入第 "+(i+1)+"个女人心中的优先顺序");

            int[] a=new int[num];
            for(int j=0;j<num;j++){
                a[j]=sc.nextInt();
            }
            women[i]=new Woman();   //必须先初始化
            women[i].setRank(a);

//          System.out.println(Arrays.toString(women[i].rank));
        }



        for(int i=0;i<num;i++){
            if(!men[i].isDate()){  //如果i这个男人没有在约会  这个男生是(i+1)号
                int chase =men[i].getRank()[men[i].getBetter()]; //目前最喜欢chase号女生
                System.out.println((i+1)+"号男生目前最喜欢"+chase+"号女生");
                men[i].setBetter(men[i].getBetter()+1); //成功与否都已经向这个女人请求过了
                System.out.println("追求过的数量变为:"+men[i].getBetter());
               
  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值