Gather the Maps!

 ACM/ICPCの問題を解いてみる。解けそうなアルゴリズムはすぐに思いついたが、実装してみるとリジェクトされてしまう。いくつかテストケースを作って通してみても通っているように見える・・・どこが間違っているかわからない。また一から作ってみよう

一応ソースコードを貼っておく。スペルミスに関する苦情は受け付けません。

#include

int schedule[50][31];

int GathertheMaps(int t){
int answer = -1;
int gloup[50];
int i,j,min;

for(i = 0;i < 50;i++){
gloup[i] = i;
}

for(i = 1;i <= 30;i++){
int end_flag= 0;

min = 100;

for(j = 0;j < t;j++){
if(schedule[j][i] == 1){
printf("%d ",gloup[j]);
if(min > gloup[j]){
min = gloup[j];
}
}
}

printf(" : %d\n",min);

for(j = 0;j < t;j++){
int temp;
int k;
if(schedule[j][i] == 1 && gloup[j] != min){
temp = gloup[j];

printf("%d→%d ",temp,min);

for(k = 0;k < t;k++){
if(temp == gloup[k])gloup[k] = min;
}
}
}
printf("\n");

for(j = 0;j < t;j++){
if(min == gloup[j])end_flag++;
printf("%2d:%d ",gloup[j],schedule[j][i]);
}
printf("\n");

if(end_flag == t){

answer = i;
break;

}
}

return answer;
}

int main(void){

int n,i,j,t,f;

for(;;printf("\n")){

//printf("check\n");

for(i = 0;i < 50;i++){
for(j = 1;j <= 30;j++){
schedule[i][j] = 0;
}
}

//printf("check2\n");

scanf("%d",&n);

if(n == 0)break;

//printf("%d\n",n);

for(i = 0;i < n;i++){
scanf("%d",&t);
//printf("%d ",t);

for(j = 0;j < t;j++){
scanf("%d ",&f);
//printf("%d ",f);
schedule[i][f] = 1;
}
//printf("\n");
}

//

for(j = 0;j < n;j++){
int k;
for(k = 1;k <= 30;k++){
printf("%d ",schedule[j][k]);
}
printf("\n");
}

//

printf("%d",GathertheMaps(n));

}

return 0;
}