稳定伴侣问题
来源:互联网 发布:mindjet mac 破解 编辑:程序博客网 时间:2024/06/02 13:03
源码如下,稍后上分析:
#include<stdio.h>#include<stdlib.h>#define SIZE 10#define FREE -1void get_mem(int [][SIZE],int ,int ***,int **,int **);void release_mem(int **,int *,int *);void stable_marriage(int man[][SIZE],int woman[][SIZE],int n,int m_eng[],int w_eng[]){int **rank;int *waiting;int *next;int boy,girl,top;get_mem(woman,n,&rank,&waiting,&next);for(girl = 0;girl < n;girl++)w_eng[girl] = -1;for(top = n - 1;top >= 0;){boy = waiting[top];girl = man[boy][(next[boy]) ++];printf("boy:%dgirl:%d\n",boy,girl);if(w_eng[girl] == FREE){w_eng[girl] = boy;m_eng[boy] = girl;top--;printf("succeed1\n");}else if(rank[girl][boy] < rank[girl][w_eng[girl]]){waiting[top] = w_eng[girl];w_eng[girl] = boy;m_eng[boy] = girl;printf("succeed2\n");}elseprintf("failed\n");}release_mem(rank,waiting,next);}void get_mem(int w[][SIZE],int n,int ***rank,int **wait,int **next){int i,j;*rank = (int **)malloc(sizeof(int *) * n);*wait = (int *)malloc(sizeof(int) * n);*next = (int *)malloc(sizeof(int) * n);(*rank)[0] = (int *)malloc(sizeof(int) * n * n);for(i = 1;i < n;i++)(*rank)[i] = (*rank)[i - 1] + n;for(i = 0;i < n;i++){(*wait)[i] = n - 1 - i;(*next)[i] = 0;for(j = 0;j < n;j++)(*rank)[i][w[i][j]] = j;}}void release_mem(int **rank,int *wait,int *next){free(rank[0]);free(rank);free(wait);free(next);}int main(){int i;int boy[][SIZE] = {{0},{2,4,1,3},{3,1,4,2},{2,3,1,4},{4,1,3,2}};int girl[][SIZE] = {{0},{2,1,4,3},{4,3,1,2},{1,4,3,2},{2,1,4,3}};int m_eng[5];int w_eng[5];stable_marriage(boy,girl,5,m_eng,w_eng);for(i = 1;i <= 4;i++)printf("%d\t%d\n",i,m_eng[i]);return 0;}
替换主函数中的boy和girl数组可以实现不同的男女组合。
- 稳定伴侣问题
- 伴侣
- 最大二分匹配:最大“素数伴侣”问题
- 稳定婚姻问题
- 稳定婚姻问题算法
- 稳定婚姻问题
- poj3487 稳定婚姻问题
- 关于稳定婚姻问题
- 【稳定婚姻问题】
- 稳定婚姻问题
- 稳定婚姻问题
- 稳定婚姻问题
- 稳定婚姻问题算法
- 稳定婚姻问题
- 稳定婚姻问题
- 稳定婚姻问题
- hdu1914 稳定婚姻问题
- hdu1435 稳定婚姻问题
- 图片版坦克大战源代码之坦克类(二)
- iframe子页面操作父页面
- jqGrid入门 中文文档 参数方法讲解(自我备用)
- 大数据量,海量数据 处理方法总结
- 一个linux聊天的例子
- 稳定伴侣问题
- 关于关键字static和extern和const
- 面试题(来自程序员面试宝典)
- Ajax四种元素的关系
- 演化理解 Android 异步加载图片
- 图片版坦克大战其他相关的 类(三)
- 一个闭包的例子
- usaco 1.4.4 Arithmetic Progressions
- myeclipse new 后面的菜单选项设置