偶然看到的,记录一下,用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;
}