永发信息网

c++乳草的入侵,求讲解

答案:2  悬赏:40  手机版
解决时间 2021-11-24 05:17
  • 提问者网友:爱唱彩虹
  • 2021-11-23 06:43
c++乳草的入侵,求讲解
最佳答案
  • 五星知识达人网友:掌灯师
  • 2021-11-23 07:40
这用的是广度优先搜索算法,要想完整地学习的话还是自行去找资料吧,这里针对这份代码说一下。dx和dy是坐标偏移量,在网格式的地图或棋盘上的搜索经常用到,这里的8个元素就是用来枚举某个点(x,y)周围相邻的8个点(x-1,y-1),(x-1,y),(x-1,y+1),(x,y-1),(x,y+1),(x+1,y-1),(x+1,y),(x+1,y+1),比如(x,y)的第一个相邻点就是(x+dx[0],y+dy[0])。稍微讲下代码:
     Q.push(s);//将第一个点加入搜索队列
     visit[s.x][s.y]=1;//点(s.x,s.y)标记为已访问
      while(!Q.empty())//队列不为空就搜索
      {
        now=Q.front();//取出队首的点
        Q.pop();
        //printf("%d %d %d
",now.x,now.y,now.step);
        for(int i=0;i<8;i++)//用循环枚举周围的8个点
        {
            next=now;
           next.x=now.x+dx[i];//x和y分别加上偏移量,得到一个新扩展的点
           next.y=now.y+dy[i];
           if(next.x>=0&&next.x=0&&next.y           {
               next.step=now.step+1;
               Q.push(next);//将新扩展的点加入搜索队列
               visit[next.x][next.y]=1;//并标记为已访问
               if(ans           }
        }
      }
全部回答
  • 1楼网友:老鼠爱大米
  • 2021-11-23 08:40
这就是一个宽搜嘛,符合条件的入队扩展节点,不断循环直到队空追问能不能给讲得清楚一点?谢谢
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯