I think you note the sentenceIf more than one order of brown, green, and clear bins yields the minimum number of movements then the alphabetically first string representing a minimal configuration should be printed.

the write order to if() compares should be follow:
[cpp]
min = sum[2];
if(sum[1] < min)
{
min = sum[1];
j = 1;
}
if(sum[4] < min)
{
min = sum[4];
j = 4;
}
if(sum[6] < min)
{
min = sum[6];
j = 6;
}
if(sum[3] < min)
{
min = sum[3];
j = 3;
}
if(sum[5] < min)
{
min = sum[5];
j = 5;
}
[/cpp]
then try again
BTW. you should use a more readable style in your code, isn't the code in the follow more comprehensible ?

if you do so, we can read your code more easier, and you'll got more and useful help
[cpp]
// B is index 0
// G is index 1
// C is index 2
// here I use myMin because min is declared in C++ <algorithm> lib
int myMin = sum[0];
sum[1] = sum[0] - glass[0][0] - glass[1][2] - glass[2][1]; // BGC
sum[2] = sum[0] - glass[0][0] - glass[1][1] - glass[2][2]; // BCG
sum[3] = sum[0] - glass[0][2] - glass[1][0] - glass[2][1]; // CBG
sum[4] = sum[0] - glass[0][2] - glass[1][1] - glass[2][0]; // CGB
sum[5] = sum[0] - glass[0][1] - glass[1][0] - glass[2][2]; // GBC
sum[6] = sum[0] - glass[0][1] - glass[1][2] - glass[2][0]; // GCB
for(int i=1; i<=6; ++i)
{
if(sum < myMin)
{
myMin = sum;
j = i;
}
}
switch(j)
{
case 1:
printf("BCG");
break;
case 2:
printf("BGC");
break;
case 3:
printf("CBG");
break;
case 4:
printf("CGB");
break;
case 5:
printf("GBC");
break;
default:
printf("GCB");
}
printf(" %d\n", myMin);
[/cpp]