Zstu2428 - How to be An ACMan - 广度优先搜索

鉴于没多少人看过这道题,给传送门:2428: How to be An ACMan,这道题类似于hdu1242这道题,但是比其难一些,因为分小坑和大坑,所以要多考虑一种,但是也是很简单的,1242题解传送门:Hdu1242 - Rescue - 广度优先搜索

#include
#include
int m,n;
char map[210][210];
int mark[210][210][3];
int to[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
struct point
{int x,y,step;int bury;//0没有坑
}queue[1000010],st,ed,now;
void bfs()
{memset(mark,0,sizeof(mark));int head,tail,i;int nx,ny;head=tail=0;st.step=0;st.bury=0;queue[tail++]=st;mark[st.x][st.y][st.bury]=1;while(head=m||ny>=n||map[nx][ny]=='#')//如果下一步超出边界或者是墙{continue;//跳过加入队列}if(nx==ed.x&&ny==ed.y)//如果结束{printf("%d\n",now.step+1);//输出结果步数return ;//结束}int burys=0;//设置一个变量没坑if(map[nx][ny]=='x')//如果下一个位置有坑{burys=1;//变量为小坑}if(map[nx][ny]=='X')//如果下一个位置有坑{burys=2;//变量为大坑}if(mark[nx][ny][burys]==1)//如果下一个位置被标记过{continue;//跳过加入队列}mark[nx][ny][burys]=1;//标记下一位置item.bury=burys;//进入下一位置item.x=nx;//进入下一位置item.y=ny;//进入下一位置item.step++;//步数加一queue[tail++]=item;//加入队列尾}}puts("-1");return ;
}
int main()
{int t;while(scanf("%d",&t)!=EOF){while(t--){scanf("%d%d",&m,&n);for(int i=0;i



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部