首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言实现婚姻匹配有关问题

2012-09-02 
C语言实现婚姻匹配问题最近因为课程需要,看了看婚姻稳定匹配问题,用了两天把代码写完了。具体问题就不详细

C语言实现婚姻匹配问题

最近因为课程需要,看了看婚姻稳定匹配问题,用了两天把代码写完了。

具体问题就不详细写了,这里给出参看的网址。

EOJ上面的问题叙述:http://202.120.106.94/onlinejudge/problemshow.php?pro_id=162

整个思路结合着老师的课件和这篇文章,用C语言完成了整个代码。

?

////  main.c//  MarriageMatch////  Created by shadowdai on 11-11-27.//  Copyright (c) 2011年 BUPTSSE. All rights reserved.//#include <stdio.h>int main (int argc, const char * argv[]){    int manPerference[3][3];//下标表示女士的号码,1-5,储存的值表示对该女士的好感度    int womanPerference[3];//表示5位女士选择的男士    int manMostLike[3];//表示男士最喜欢的女士    int manCurrentMatch[3];//表示当前男士的配对对象    int womanCurrentMatch[3];//表示当前女士的配对对象    int womanBool[3];//表示女士的配对状况,0表示未配对,1表示已经配对    int manBool[3];//表示男士的配对状况    int MatchNumber = 0;    int i,j;    int max,Max;        printf("输入男士的好感度排名:(数字越大表示越喜欢)\n");    for (i = 0; i < 3; i++) {        printf("男士%d:\n",i+1);        for (j = 0; j < 3; j++) {            scanf("%d", &manPerference[i][j]);        }    }            //女士选择男士    for (i = 0; i < 3; i++) {        max = 0;        womanBool[i] = 0;        manBool[i] = 0;        Max = manPerference[0][i];        for ( j = 0; j < 3; j++) {            if (manPerference[j][i] > Max) {                max = j;                Max = manPerference[j][i];            }        }        womanPerference[i] = max;    }        printf("\n女士的选择:\n");    for (i = 0; i < 3; i++) {        printf("女士No.%d选择%d\n",i+1, womanPerference[i]+1);    }        //选出男士最喜欢的女士    for ( i = 0; i < 3; i++) {        for ( j = 0; j < 3; j++) {            if (manPerference[i][j] == 3) {                manMostLike[i] = j;            }        }    }        printf("\n男士最喜欢的女士:\n");    for (i = 0; i < 3; i++) {        printf("No.%d男士选择了No.%d女士\n",i+1,manMostLike[i]+1);    }    printf("\n");    while (MatchNumber != 3) {        //根据男士和女士的选择的对象进行匹配        for (i = 0; i < 3; i++) {            if (womanBool[manMostLike[i]] == 0 && manBool[i] == 0) {                //如果该男士选择的女士没有配对,那么将他们配对                manCurrentMatch[i] = manMostLike[i];                womanCurrentMatch[manMostLike[i]] = i;                womanBool[manMostLike[i]] = 1;                manBool[i] = 1;                MatchNumber += 1;                printf("No.%d男士与No.%d女士配对,两位在此之前均没有配对。\n", i+1, manCurrentMatch[i]+1);            }            else if(womanBool[manMostLike[i]] == 1 && manBool[i] == 0){                //如果该女士已经配对,则需要比较该女士更喜欢哪位男士                if (womanPerference[manMostLike[i]] == i) {                    //如果该女士选择的是该男士,那么直接进行配对                    manCurrentMatch[i] = manMostLike[i];                    womanCurrentMatch[manMostLike[i]] = i;                    womanBool[manMostLike[i]] = 1;                    manBool[i] = 1;                    MatchNumber += 1;                    printf("No.%d男士与No.%d女士配对,虽然该女士之前有配对对象,但是选择了该男士。\n", i+1, manCurrentMatch[i]+1);                }                else if( manPerference[i][manMostLike[i]] > manPerference[womanCurrentMatch[i]][manMostLike[i]]){                    //如果该女士没有选择该男士,但是该女士现在的配对对象的优先级低于该男士,则将他们配对                    manBool[womanCurrentMatch[manMostLike[i]]] = 0;                    manCurrentMatch[i] = manMostLike[i];                    womanCurrentMatch[manMostLike[i]] = i;                    womanBool[manMostLike[i]] = 1;                    manBool[i] = 1;                     printf("No.%d男士与No.%d女士配对,虽然该女士之前有配对对象,但是更喜欢该男士。\n", i+1, manCurrentMatch[i]+1);                }                else{                    //如果该女士没有选择该男士,并且该男士的优先级低于该女士,那么该女士拒绝该男士                    for ( j = 0; j < 3; j++) {                        //该男士被拒绝之后,只能寻找下一个最喜欢的女士                        if (manPerference[i][j] == manPerference[i][manMostLike[i]] -1) {                            manMostLike[i] = j;                            printf("No.%d男士没有配对成功,所以降低了选择的人士,现在他最喜欢No.%d女士。\n",i+1, j+1);                            break;                        }                    }                }            }            else if(manBool[i] == 1){                printf("No.%d男士已经配对成功。\n",i+1);            }        }    }        for (i = 0; i < 3; i++) {        printf("\nNo.%d男士与No.%d女士配对成功!\n", i+1, manCurrentMatch[i]+1);    }}
?如果有需要,请标明转载,谢谢!

热点排行