int MainWindow::getRandomStep(QPoint p) { int m[MAX_SIZE][MAX_SIZE]; memcpy(m,map,sizeof(m)); QPoint p_a[4]; p_a[to_left] = QPoint(p.x() - 1, p.y()); p_a[to_right] = QPoint(p.x() + 1, p.y()); p_a[to_up] = QPoint(p.x(), p.y() - 1); p_a[to_down] = QPoint(p.x(), p.y() + 1); int p_l[4]; int i = 0; int p_mn = -1; int p_max = -1; for(; i < 4; i++) { if(is_in(p_a[i]) && m[p_a[i].x()][p_a[i].y()] == none) { p_l[i] = calcH(point(getHead().x(),getHead().y()), food_pos); if(p_l[i] > p_max) { p_max = p_l[i]; p_mn = i; } } } return p_mn; }
//Update static void update(void) { calcJD(); calcE(); field_defaultIncidence(Ez); calcMB(); calcH(); }
static inline void update(void) { calcJD(); calcE(); calcMB(); calcH(); field_defaultIncidence(Hz); }
int validSuccessor(tQueue *a, tQueue *f, tNodeQueue *p, tNodeQueue *m, int heuristica) { m->elem->g = p->elem->g + 1; printf("%d\n",a); if ((!(memberOf(m, a)) || (!(memberOf(m, f))))) { insertAtEnd(m, a); calcH(p, m, heuristica); } else { if (memberOfWithGMin(m, a)) { insertAtEnd(m, a); calcH(p, m, heuristica); } else { if (memberOfWithGMin(m, f)) { removeElem(m, f); insertAtEnd(m, a); calcH(p, m, heuristica); } } } }
static inline void update(void) { calcJD(); calcE(); scatteredWave(Ey, EPS_EY); calcMB(); calcH(); }
//Update static void update(void) { // _CalcJD(); calcJD(); calcE(); // MPI_Barrier(MPI_COMM_WORLD); //ăăăȘă? scatteredWave(Ez, EPS_EZ); //planeWave(Ez, EPS_EZ); //Connection_SendRecvE(); Connection_ISend_IRecvE(); // _CalcMB(); calcMB(); calcH(); Connection_ISend_IRecvH(); //Connection_SendRecvH(); ntff(); }
int MainWindow::find_way(QPoint start,QPoint finish) { init(); bool flag = false; point s; s = point(start.x(), start.y()); calcH(s, finish); s.calcF(); open.push_back(s); while(!open.empty()) { sort(open.begin(), open.end()); point *tmp = new point(*open.begin()); open.erase(open.begin()); close[tmp -> x][tmp -> y] = true; if(tmp -> x == finish.x() && tmp -> y == finish.y()) { ans = *tmp; flag = true; break; } for(int i = 0; i < 4; ++i) { point *ct = new point(tmp -> x + change[i][0], tmp -> y + change[i][1]); if(is_in(*ct) && close[ct -> x][ct -> y] == false) { std::vector<point>::iterator iter = is_in_que(*ct); if(iter == open.end()) { ct -> parent = tmp; ct -> g = ct -> calcG(); ct -> h = calcH(*ct , finish); ct -> calcF(); open.push_back(*ct); }else{ ct -> parent = tmp; ct -> g = ct -> calcG(); int G = iter -> g; if(G > ct -> g){ iter -> parent = ct -> parent; iter -> g = G; iter -> calcF(); } } } } } point* po = &ans; while(po -> parent != nullptr && po -> parent -> parent != nullptr && po -> parent -> parent != nullptr) { po = po -> parent; } if(flag){ if(s.x < po->x) { return to_right; }else if(s.x > po -> x) { return to_left; }else if(s.y < po -> y) { return to_down; }else if(s.y > po -> y){ return to_up; } } return -1; }
static void update(){ calcE(); field_defaultIncidence(Ezx); field_defaultIncidence(Ezy); calcH(); }