G_S男女匹配算法(算法的第一个程序2016.09.19)

 1 #include<iostream>
 2 using namespace std;
 3 int main(){
 4     int Smallest_numberFree = 0;//记录单身的号码最低的男性
 5     int i = Smallest_numberFree, n, k = -1;//n代表有多少对男女
 6
 7     cout << "请输出有多少对男女:";
 8     cin >> n;
 9     int **Man = new int*[n], **Woman = new int*[n];//前者代表每个男性的心中女性的排名,后者代表心中的男性的排名
10     int *M_IsFree =new int[n], *W_IsDating=new int[n];//前者-1代表单身,是自由的,后者-1代表还没有约会过,大于-1的值是约会的对象
11     int *M_bestWoman = new int[n];//代表每个男人目前未表白的女性中排名最高的人
12     int *count = new int[n];//代表每个男性已经表白了多少次
13     cout << "请输出男/女性编号从0到" << n - 1 << "的各个心目中女/男性编号0到" << n - 1 << "的排名(空格):" << endl;
14     for (int i = 0; i < n; i++){
15         Man[i] = new int[n]; Woman[i] = new int[n];
16         cout <<"男"<< i << "号:";
17         for (int j = 0; j < n; j++){
18             cin >> Man[i][j];
19             M_IsFree[j] = -1;
20             W_IsDating[j] = -1;
21             count[i] = -1;
22         }
23         M_bestWoman[i] = Man[i][0];
24         cout << "女" << i << "号:";
25         for (int j = 0; j < n; j++)
26             cin >> Woman[i][j];
27     }
28     while (Smallest_numberFree < n){//若某个男人还是单身
29         i = Smallest_numberFree;
30         if (W_IsDating[M_bestWoman[i]] == -1){//若男人未表白的女性最赞赏的还未约会
31             M_IsFree[i] = M_bestWoman[i];//男人开始与她约会,美好的时光啊
32             W_IsDating[M_bestWoman[i]] = i;//女人记录约会的对象
33             M_bestWoman[i] = Man[i][++count[i]];//男人记录还未表白的女人中最赞赏的
34             Smallest_numberFree++;
35         }
36         else{
37             k = W_IsDating[M_bestWoman[i]];//如果男人看上的女人已经开始约会了,k代表约会的对象的id
38             for (int j = 0; j < n; j++){//循环查找女人目前约会的对象和表白的男人之间在女人心中的排名
39                 if (Woman[M_bestWoman[i]][j] == k){//如果女人处于约会状态而且目前的对象优于表白的男人
40                     M_bestWoman[i] = Man[i][++count[i]];//表白的男人开始找下一个
41                     k = -1;//id清零
42                     break;
43                 }
44                 if (Woman[M_bestWoman[i]][j] == i){//如果女人处于约会状态而且对表白者的好感优于目前的约会对象
45                     M_IsFree[k] = -1;//把即将被抛弃的男人归为单身
46                     M_bestWoman[k] = Man[k][++count[k]];
47                     M_bestWoman[i] = Man[i][++count[i]];//表白成功的和被甩的都预定了下一个最赞赏的女性
48                     break;
49                 }
50             }
51         }
52         if (k != -1){//表示该男人目前单身
53             Smallest_numberFree = k;
54         }
55     }
56     cout << "最终生成的稳定匹配是:" << endl;
57     cout << "男" << "\t" << "女" << "\t" << endl;
58     for (int i = 0; i < n; i++){
59         cout << i << "\t" << M_IsFree[i] << "\t" << endl;
60     }
61     for (int i = 0; i < n; i++){
62         delete[] Man[i];
63         delete[]Woman[i];
64     }
65     delete[] W_IsDating;
66     delete[] M_bestWoman;
67     delete[] M_IsFree;
68     delete[] count;
69 }
时间: 2024-10-28 13:45:21

G_S男女匹配算法(算法的第一个程序2016.09.19)的相关文章

站立会议第一天(2016.4.19)

一.会议信息 1.讨论了今天要完成的任务及进度 2.讨论认领任务后自己所认为的困难 3.再次对项目模块进行了细化 二.任务进度 由于是第一天,团队成员还处于摸索阶段,正在努力学习中... 三.任务看板 四.燃尽图

算法导论 第一章

算法导论 第一章,为了让自己基本功更加的扎实,从今天起开始学习算法导论. 我以一位学长的博客为学习的参考资料,开始我的学习吧! 附上一句话: Having a solid base of algorithm knowledge and technique is one characteristic that separates the truly skilled programmers from the novices. 是否具有扎实的算法知识和技术基础,是区分真正熟练的程序员与新手的一项重要特

摸索百天后第一个程序之深入研究和实现

    进入实验室快一百天了,从刚开始阅读老师给的几大包英文文献,期间那种科技专用术语的晦涩和cs专业知识的欠缺对我的自信心造成了很大的摧残,好在我坚持下来了,谢谢自己.     在这里我知道我之前工作过,和其他人不一样,应该对自己有不一样的要求,这种思想也给了我无形中的压力,慢慢在自己的调整下我稳步向前进步着,从不知道自己学什么到现在---我在老师给的shape grammars的项目研究中摸索到它需要很多machine learning 的知识和一些编程技术,以及其他一些计算机思想 .  

第一位程序员

阿达·奥古斯塔,19世纪诗人拜伦的女儿,数学家.穿孔机程序创始人,建立了循环和子程序概念.为计算程序拟定“算法”,写作的第一份“程序设计流程图”,被珍视为“第一个给计算机写程序的人”. 生平: 1815年生于伦敦,她是英国著名诗人拜伦(L.Byron)的女儿.因父母婚姻破裂,出生5星期后就一直跟随母亲生活.母亲安娜·密尔班克(A.Millbanke)是位业余数学爱好者,阿达没有继承父亲诗一般的浪漫热情,却继承了母亲的数学才能. 阿达19岁嫁给了威廉·洛甫雷斯伯爵,因此,史书也称她为洛甫雷斯伯爵夫

从零开始学习PYTHON3讲义(三)写第一个程序

<从零开始PYTHON3>第三讲 本页面使用了公式插件,因博客主机过滤无法显示的表示抱歉,并建议至个人主页查看原文. ? 我见过很多初学者,提到编程都有一种恐惧感,起源是感觉编程太难了.其实,难的也不过是开头第一步,所以中国有古话说,万事开头难. ? 一个人想得到别人的帮助,通常是同别人沟通,请求对方伸出援手.沟通的工具当然是语言,甚至可能还要加上晓之以理.动之以情的表情.手势.比较而言,请计算机帮忙就简单多了,只需要语言就够了. ? 人类沟通的语言,需要两个人都能听懂,比如碰到一个不会中文的

java基础--JDK安装、环境变量配置、工具开发第一个程序、数据类型、运算符

**-----Java基础大纲-----**   **-----本章节-----** 1.Java语言的历史.特点及工作原理 2.JRE和JDK的介绍 3.Java运行环境和开发工具 4.Java基础语法 **-----下一章节-----** 5.条件语句 6.循环 7.数组 ============================================== 一:历史及开发准备 1.Java发展历程及来源 (1)发展历程 1996年1月,Sun公司发布了Java的第一个开发工具包(JD

Breaseman算法绘制圆形|中点算法绘制圆形_程序片段

Breaseman算法绘制圆形|中点算法绘制圆形_程序片段 1. Breaseman算法绘制圆形程序 由于算法的特殊性,限制绘制第一象限部分,其他部分通过旋转绘制. 1 void CCGProjectWorkView::bresenHam_1P4Circle(int radium, const float lineColor[]) 2 { 3 int pointX, pointY, deltD, deltHD, deltDV, direction; 4 pointX = 0; 5 pointY

Linux下C++的编程——开发环境搭建与第一个程序

上一篇文章Linux下C++的编程--开偏介绍中我们已经介绍了GUN.GCC.G++等一些重要的概念,现在应该开始动手实践了! 开发工具的安装 环境 Distributions版本:CentOS 6.7 Linux内核片:2.6.32-573.3.1.el6.i686 一般Linux安装完之后默认就已经安装了GCC(GNU Compiler Collection),你可以查看一下gcc和g++的版本号检查gcc和g++是否已经安装. [luowf@luoweifu ~]$ gcc -v gcc

日更第2期-2015-1-15-openFrameworks系列第一讲-手把手制作openFrameworks上的第一个程序!

恩,今天和朋友打球来着,于是今天的案例程序就做一个球吧!O(∩_∩)O哈哈~ 首先,没有看过上一篇教程的同学,还有还没有下载好VS和OpenFrameworks的同学,都去下一下. 传送地址:http://www.cnblogs.com/linongbo/p/4227552.html 那么,开始今天的日更啦! Hello OpenFrameworks! VS的安装部分我就不说了,不过我个人建议——默认是安装在C盘的,不过你要是手动改到别的盘上的话,C盘上 依然会有6G左右的内容.......Σ(