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 }
}
}
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
next.step=now.step+1;
Q.push(next);//将新扩展的点加入搜索队列
visit[next.x][next.y]=1;//并标记为已访问
if(ans
}
}
全部回答
- 1楼网友:老鼠爱大米
- 2021-11-23 08:40
这就是一个宽搜嘛,符合条件的入队扩展节点,不断循环直到队空追问能不能给讲得清楚一点?谢谢
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯