该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
return -1;
}
void move678()
{
int from;
from = getpos('6');
printf("6归位:\n");
movex(from, 6, "000000000");
from = getpos('7');
printf("7归位:\n");
movex(from, 7, "000000100");
if (block[8] == '8') return;
if (block[8] == '0' && block[5] == '8') {
moveto(5, 8);
return;
}
printf("8移动到4(中间)\n");
from = getpos('8');
movex(from, 4, "000000110");
printf("6移到3:\n");
movex(6, 3, "000010010");
printf("7移到6:\n");
moveto(7, 6);
printf("8移到7:\n");
moveto(4, 7);
printf("678还原:\n");
movex(7, 8, "000100100");
moveto(6, 7);
moveto(3, 6);
}
void moverest()
{
printf("5到2:\n");
movex(getpos('5'), 2, "000000111");
if (block[5] != '4') {
if (block[4] == '4' && block[5] == '0') moveto(4, 5);
else {
printf("4移到1:\n");
movex(getpos('4'), 1, "001000111");
printf("位置5移到4:\n");
if (block[5] != '0') movex(5, 4, "011000111");
printf("678右移:\n");
moveto(8, 5);
moveto(7, 8);
moveto(6, 7);
moveto(3, 6);
printf("4移到4:\n");
movex(1, 4, "001001011");
printf("678还原:\n");
movex(7, 6, "001011001");
moveto(8, 7);
moveto(5, 8);
moveto(4, 5);
}
}
printf("3复原:\n");
movex(getpos('3'), 3, "001001111");
printf("4复原:\n");
movex(5, 4, "001100111");
printf("5复原:\n");
moveto(2, 5);
moveto(1, 2);
moveto(0, 1);
}
int main(int argc, char **argv)
{
int j;
char buf[20];
scanf("%s", buf);
for (j = 0; j
block[j] = buf[j];
}
block[9] = 0;
move678();
moverest();
if (block[1] == '2') printf("无解.\n");
return 0;
}