Example #1
0
 //�������� ������� ����������� �����
 protected override void StartSearch()
 {
     Started();
        /* if (!DoHaveResolve(_start))
             Progressing("������� �� �����. ������� �� ������");
         else*/
         {
             SearchIDA searchIDA = new SearchIDA();
             State state = new State();
             for (int i = 0; i < SearchBase.Dimension * SearchBase.Dimension; ++i)
             {
                 int value = _start[i];
                 value++;
                 if (value != SearchBase.Dimension * SearchBase.Dimension)
                     state.SetCell(i / SearchBase.Dimension, i % SearchBase.Dimension, value);
                 else
                     state.SetEmpty(i / SearchBase.Dimension, i % SearchBase.Dimension);
             }
             searchIDA._state.m_cells = (uint[,])state.m_cells.Clone();
             searchIDA._state.m_emptyX = state.m_emptyX;
             searchIDA._state.m_emptyY = state.m_emptyY;
             _countStates = 0;
             //����� ����� ������������ ����
             List<Move> solution = searchIDA.GetOptimalSolution();
             //�� �������� ����� ����������� �� ������� ������� � ���������
             solution.Reverse();
             arResult = new int[solution.Count + 1][];
             arResult[0] = _start;
             int arIndex = 1;
             foreach (Move m in solution)
             {
                 state.Move(m);
                 arResult[arIndex] = new int[SearchBase.Dimension * SearchBase.Dimension];
                 int j = 0;
                 for (int ii = 0; ii < SearchBase.Dimension; ii++)
                     for (int jj = 0; jj < SearchBase.Dimension; jj++, j++)
                     {
                         if (ii == state.m_emptyX &&
                             jj == state.m_emptyY)
                             arResult[arIndex][j] = SearchBase.Dimension * SearchBase.Dimension - 1;
                         else
                             arResult[arIndex][j] = (int)state.m_cells[ii, jj];// - 1;
                     }
                 arIndex++;
             }
             TimeSpan timeSearch = DateTime.Now - timeStart;
             if (arResult.Length - 1 != 0)
             {
                 int v=(arResult.Length - 1)%10;
                 string st = (v == 2 || v == 3 || v == 4) ? " ����" : ((v == 1) ? " ���" : " �����");
                 Progressing("����",
                     "�����. " + Environment.NewLine + (arResult.Length).ToString(CultureInfo.InvariantCulture) +
                     st+Environment.NewLine + "�����:" + timeSearch.ToString() +
                     Environment.NewLine + "\n����� ���-�� ������������� ���������\t: " +
                     _countStates.ToString(CultureInfo.InvariantCulture) +
                     Environment.NewLine + "\n**** ����� �������� ****" +
                     Environment.NewLine + "\n����� ������\t: " + timeSearch.ToString() +
                     Environment.NewLine + "\n���-�� ����� ��� ����� �������\t: " +
                     (arResult.Length ).ToString(CultureInfo.InvariantCulture) +
                     Environment.NewLine + "\n  �� ������ ������ ������ \n(��� Ctrl+P) � ��������� ������� ����������� �����.");
             }
             else
                 Progressing("� ��� � ������ ������ ?");
         }
         Finished();
 }