/*返回值:成功-返回搜索节点数,节点数不够-(-1),无解-(-2)*/
long bfs_search(char *begin, char *end)
{    long     h=0, r=1, c, i, j;
     EP_NODE l_end, node, *pnode;
     EP_MOVE mv[4];                       //每个局面最多4种走法
     TRANS(begin, m_ar[0].v);
     TRANS(end, l_end.v);
     m_ar[0].prev=NULL;
     m_root=m_ar;
     m_root->small=NULL;
     m_root->big=NULL;
     while((h < r) && (r < MAX_NODE - 4))
     {   c=move_gen(&m_ar[h], mv);
         for(i=0; i < c; i++)
         {   mov(&m_ar[h], &mv[i], &node);
             node.prev= &m_ar[h];
             if(node.v == l_end.v)
             {   pnode= &node;
                 j=0;
                 while(pnode->prev)
                 {   m_out[j]=*pnode;
                     j++;
                     pnode=pnode->prev;
                 }
                 m_depth=j;
                 return r;
             }
             if(add_node(&node, r)) r++; //只能对历史节点中没有的新节点搜索,否则会出现环
         }
         h++;
         printf("\rSearch...%9d/%d @ %d", h, r, get_node_depth(&m_ar[h]));
}
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页