void search() { int open = 0, closed = -1, i, j; for (i = 0; i < 8; i++) data[0].ms[i] = i + 1; data[0].pre = -1; data[0].f = 0; if (npr(data[0].ms) == goal) { fprintf(fout, "0\n\n"); return; } i = checkused(data[0], closed, 'a'); while (closed < open) { struct DATA tmp = data[++closed]; tmp.pre = closed; tmp.f = data[closed].f + 1; for (i = 0; i < 4; i++) swap(&tmp.ms[i], &tmp.ms[7 - i]); j = checkused(tmp, closed, 'A'); if (j == 2) return; if (j) { tmp.abc = 'A'; data[++open] = tmp; } tmp = data[closed]; tmp.pre = closed; tmp.f = data[closed].f + 1; for (i = 0; i < 3; i++) { swap(&tmp.ms[i], &tmp.ms[3]); swap(&tmp.ms[7 - i], &tmp.ms[4]); } j = checkused(tmp, closed, 'B'); if (j == 2) return; if (j) { tmp.abc = 'B'; data[++open] = tmp; } tmp = data[closed]; tmp.pre = closed; tmp.f = data[closed].f + 1; swap(&tmp.ms[1], &tmp.ms[2]); swap(&tmp.ms[1], &tmp.ms[5]); swap(&tmp.ms[1], &tmp.ms[6]); j = checkused(tmp, closed, 'C'); if (j == 2) return; if (j) { tmp.abc = 'C'; data[++open] = tmp; } } }
static void param_elem( Tparam* p[], int n, int rep ) { switch (p[n-1]->tag) { case ELEM_PARAM: if (p[n-1]->data.elem->elemidx == IMAGE || p[n-1]->data.elem->elemidx == IMAGERGB || p[n-1]->data.elem->elemidx == IMAGERGBA ) error( "%s is not a valid child", p[n-1]->data.elem->elemname ); break; case NAME_PARAM: if (!iselem(p[n-1]->data.name)) warning( "undeclared control '%s' (argument #%d)", p[n-1]->data.name, n ); else if (!rep) checkused( p[n-1]->data.name ); break; case STRING_PARAM: error( "control expected (argument #%d)", n ); break; } }