Chinaunix首页 | 论坛 | 博客
  • 博客访问: 39901
  • 博文数量: 22
  • 博客积分: 1130
  • 博客等级: 少尉
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-11 17:20
文章分类

全部博文(22)

文章存档

2010年(3)

2009年(19)

我的朋友
最近访客

分类: C/C++

2010-06-06 19:12:04

大半个下午都耗费在这个问题上了,其实很简单,但是很容易乎略。

问题如下:

宽搜的时候定义一个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);
            }
        }


谨记谨记。。。


阅读(420) | 评论(0) | 转发(0) |
0

上一篇:Emacs with Git

下一篇:没有了

给主人留下些什么吧!~~