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;
	}
    }
}
示例#2
0
文件: ledc.c 项目: sanikoyes/iup
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;
  }
}