稳定婚姻匹配问题
要求
输入:
(第一行数据表示 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());