//Поиск соседей private CursoR FindCursorNearMaxValue(CursoR Parent, CursoR cs) { CursoR maxMember = new CursoR(); int cur_J; int cur_i; for (int i = -1; i <= 1; i++) // 0 - от текущей строки { for (int j = -1; j <= 1; j++) { cur_J = cs.j + j; cur_i = cs.i + i; if (Exist(cur_i, cur_J)) // не выходим за границы { if (!AlreadyPresent(Parent.Neighbors, cur_i, cur_J)) { if ((cur_i != Parent.i) || (cur_J != Parent.j)) //и не родителя { if ((cur_i != cs.i) || (cur_J != cs.j)) //и не берем себя { if (maxMember.Value < items[cur_i, cur_J].Value) // ищем маскимального { maxMember = items[cur_i, cur_J]; } } } } } } } return(maxMember); //result; }
/// <summary> /// Максимальное произведение в матрице /// </summary> /// <returns></returns> private CursoR getMAXMultCursor() { int maxInt = 0; CursoR maxMulti = new CursoR(); foreach (CursoR cr in items) { if (maxInt < cr.GetMult()) { maxInt = cr.GetMult(); maxMulti = cr; } } return(maxMulti); }
//Заполнение соседей - поиск public CursoR FindMult_1() { //главный цикл - полного сканирования матрицы for (int i = 0; i <= maxi; i++) { for (int j = 0; j <= maxj; j++) { CursoR memb1 = new CursoR(); CursoR memb2; // = new CursoR(); CursoR memb3; // = new CursoR(); memb1 = FindCursorNearMaxValue(items[i, j], items[i, j]); items[i, j].Neighbors.Add(memb1); //First максимальный сосед memb2 = FindCursorNearMaxValue(items[i, j], memb1); // второй максимальный сосед items[i, j].Neighbors.Add(memb2); memb3 = FindCursorNearMaxValue(items[i, j], memb2); // третий максимальный сосед items[i, j].Neighbors.Add(memb3); } } return(getMAXMultCursor()); }