大半个下午都耗费在这个问题上了,其实很简单,但是很容易乎略。
问题如下:
宽搜的时候定义一个QNd类,表示队列中的节点。
class QNd
{
public:
int x,y,step;
QNd(int xx,int yy,int ss)
{x=xx;y=yy;step=ss;}
};
|
然后在BFS中写下了这样的代码:
while(!Q.empty())
{
QNd node=Q.front();
Q.pop();
for(int i=0;i<4;i++)
{
int nx=node.x+dir[i][0];
int ny=node.y+dir[i][1];
if(valid(nx,ny)&&(!visited[nx][ny]))
{
visited[nx][ny]=true;
//node.x=nx;
//node.y=ny;
//node.step++;
//Q.push(node); 就错在这个地方 在for(int i=0;i<4;i++)中还用到了node的值,而这里改变了.
QNd next(nx,ny,node.step+1);
Q.push(next);
}
}
|
谨记谨记。。。
阅读(417) | 评论(0) | 转发(0) |