男女稳定匹配算法 C
代码
#include#include
#define N 5
int Compared(int a, int b, int value);
void chushi();
int * suiji(int min, int max);
void pipei();
struct BOYS
{int Blike[10]; int free; int point; int soul;
};struct GIRLS
{int Glike[10];int soul; int point;int free;
};
struct BOYS boys[N];
struct GIRLS girls[N];int main()
{chushi();pipei();return 0;
}void chushi()
{int i, j;for (i = 0; i < N; i++){int* p = suiji(0, 5);printf("请输入第%d男对5名女生好感排序:", i+1);for (j = 0; j < N; j++){printf("%d ", *p+1);boys[i].Blike[j] = *p++;}printf("\n");boys[i].free = 0;boys[i].point = 0;boys[i].soul = 0; }for (i = 0; i < N; i++){printf("男 %d soul %d free %d point %d\t",i+1, boys[i].soul, boys[i].free, boys[i].point);printf("blike-->");for (j = 0; j < N; j++)printf(" %d\t", boys[i].Blike[j]+1);printf("\n");}for (i = 0; i < N; i++){int* p = suiji(0, 5);printf("请输入%d女对5名男生好感排序:", i+1 );for (j = 0; j < N; j++){printf("%d ", *p+1);girls[i].Glike[j] = *p++;}printf("\n");girls[i].free = 0;girls[i].point = 0;girls[i].soul = 0; }for (i = 0; i < N; i++){printf("女 %d soul %d free %d point %d\t",i+1, girls[i].soul,girls[i].free, girls[i].point);printf("glike-->");for (j = 0; j < N; j++)printf(" %d\t", girls[i].Glike[j]+1);printf("\n");}
}int* suiji(int min, int max)
{int i, tem, ran;static int a[10] = { NULL };if (a[1] == NULL){int k = 0;for (i = 0; i < max; i++){a[i] = k++;}}SYSTEMTIME t;GetSystemTime(&t);srand((unsigned)t.wMilliseconds);for (i = 0; i < max; i++){ran = rand() % max;tem = a[i];a[i] = a[ran];a[ran] = tem;}return a;
}int Compared(int a, int b, int value)
{int i;for (i = 0; i < N; i++){if (girls[value].Glike[i] == a)return 1;if (girls[value].Glike[i] == b)return 0;}return -1;
}void pipei()
{int i, j;while(1){int end = 0;for (i = 0; i < N; i++){if (boys[i].free != 0) continue; int value = boys[i].Blike[boys[i].point]; if (girls[value].free == 0) {boys[i].soul = value;girls[value].soul = i;boys[i].free = 1; girls[value].free = 1;}else{if (Compared(girls[value].soul, i, value)) {boys[i].point++;}else{boys[girls[value].soul].free = 0;boys[girls[value].soul].point++;boys[i].soul = value;girls[value].soul = i;boys[i].free = 1;}}}for (i = 0; i < N; i++)if (boys[i].free == 1)end++;if (end == N) break;}for (i = 0; i < N; i++){printf("男 %d -->女 %d\t", i+1, boys[i].soul+1);printf("\n");}
}
运行结果:

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!