代码
#include <stdio.h>
#include <windows.h>
#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" ) ;
}
}
运行结果: