偶然看到的,记录一下,用head用于front操作,tail用于push操作。
缺点消耗空间,速率不知奥,看起来好看一点,,,简单的可以用这个代替一下。

int GetH(int x, int y) { bool vv[35][35]; memcpy(vv, has, sizeof(has)); int head = 0, tail = 0, cnt = 0; int _xx[35], _yy[35]; _xx[tail] = x; _yy[tail++] = y; while(tail != head) { int _x = _xx[head]; int _y = _yy[head]; for(int i = 0; i < 4; i++) { int x_ = _x + mo1[i]; int y_ = _y + mo2[i]; if(x_ < m && x_ >= 0 && y_ < n && y_ >= 0 && g[x_][y_] != '#' && !vv[x_][y_]) { vv[x_][y_] = true; _xx[tail] = x_; _yy[tail++] = y_; cnt++; } } head++; } return cnt; }