|
一応プログラムをのせておきます。
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <memory.h>
#define NUMBER 400 /* 必要人数*/
#define NIN 20
#define DAY 56
void check_data( int data[][DAY] );
int hyouka( int y1[], int y2[] );
void swap( int *xy1, int *xy2 );
int main( void )
{
int data[NIN][DAY] = {
{2,2,2,2,2,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,},
{2,2,2,2,2,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,},
{2,2,2,2,2,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,},
{0,0,0,0,0,3,3,2,2,2,2,2,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,},
{0,0,0,0,0,3,3,2,2,2,2,2,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,},
{0,0,0,0,0,3,3,2,2,2,2,2,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,},
{0,0,0,0,0,3,3,0,0,0,0,0,3,3,2,2,2,2,2,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,},
{0,0,0,0,0,3,3,0,0,0,0,0,3,3,2,2,2,2,2,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,},
{0,0,0,0,0,3,3,0,0,0,0,0,3,3,2,2,2,2,2,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,},
{0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,2,2,2,2,2,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,},
{0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,2,2,2,2,2,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,},
{0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,2,2,2,2,2,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,},
{0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,2,2,2,2,2,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,},
{0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,2,2,2,2,2,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,},
{0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,2,2,2,2,2,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,},
{0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,2,2,2,2,2,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,},
{0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,2,2,2,2,2,3,3,0,0,0,0,0,3,3,},
{0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,2,2,2,2,2,3,3,0,0,0,0,0,3,3,},
{0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,2,2,2,2,2,3,3,},
{0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,3,3,2,2,2,2,2,3,3,},
};
int hyoukas1 = 0, hyoukas2 = 0;
int x1, x2, y1, y2;
int i,j,k,counter;
srand((unsigned)time(NULL));
for(counter = 0; counter < NUMBER; counter++)
{
i = rand() % NIN;
j = rand() % DAY;
if(data[i][j] == 0)
{
k = data[i][j];
data[i][j] = 1;
}
else
{
counter--;
}
}
printf("---------初期の勤務状況\n");
for (i = 0; i < NIN; i++)
{
for (j = 0; j < DAY; j++)
{
printf("%d",data[i][j]);
if(j == 55)
printf("\n");
}
}
check_data( data );
for (y1 = 0; y1 < NIN; y1++)
for (x1 = 0; x1 < DAY; x1++)
for (y2 = 0; y2 < NIN; y2++)
for (x2 = 0; x2 < DAY; x2++)
if (x1 != x2 || y1 != y2
&& data[y1][x1] != data[y2][x2]) {
hyoukas1 = hyouka( data[y1], data[y2] );
swap( &data[y1][x1], &data[y2][x2] );
hyoukas2 = hyouka( data[y1], data[y2] );
if (hyoukas1 >= hyoukas2)
swap( &data[y1][x1], &data[y2][x2] );
}
printf("---------並び替え後の勤務状況\n");
for (i = 0; i < NIN; i++)
{
for (j = 0; j < DAY; j++)
{
printf("%d",data[i][j]);
if(j == 55)
printf("\n");
}
}
return 0;
}
void check_data( int data[][DAY] )
{
int i, j;
for (i = 0; i < NIN; i++)
for (j = 0; j < DAY; j++)
if (data[i][j] != 0 && data[i][j] != 1) {
fprintf( stderr, "data[%d][%d] is NG\n", i, j );
exit( 1 );
}
}
int hyouka( int y1[], int y2[] )
{
int point1 = 0, point2 = 0;
int i;
for (i = 0; i < DAY - 1; i++)
if (y1[i] != y1[i + 1])
point1++;
for (i = 0; i < DAY - 1; i++)
if (y2[i] != y2[i + 1])
point2++;
return point1 + point2;
}
void swap( int *xy1, int *xy2 )
{
int tmp;
tmp = *xy1;
*xy1 = *xy2;
*xy2 = tmp;
}
|