文章
16
粉丝
0
获赞
54
访问
1.8k
#include <stdio.h>
#include <string.h>
struct node{
int x,y;
int step;
};
struct node q[10000]={0}; //模拟队列
char mpt [105][105];
int vis[105][105];
int dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};//方向
int bfs(int sx,int sy)
{
memset(vis,0,sizeof(vis));
int head=0,tail=0;//模拟队列的头和尾
q[tail++]= (struct node){sx,sy,0};//取起点加入队列
vis[sx][sy] = 1;//标记已经访问
int ans = -1;
while(head<tail)//队列非空
{
struct node now =q[head++];//取出队列头节点
if(mpt[now.x][now.y]=='E')//循环终止条件
{
ans = now.step;
break;
}
for(int i=0;i<4;i++)//取队列头节点的上下左右判断是否加入队列
{
int nx = now.x+dir[i][0];
int ny = now.y+dir[i][1];
if((mpt[nx][ny] == '*' || mpt[nx][ny] == 'E') && vis[nx][ny] == 0)//判断是否能走,以及这个点标记过没有
{
vis[nx][ny] = 1;//没有标记过就标记
q[tail++] = (struct node){nx,ny,now.step+1};//把这个点入队
}
}
}
return ans;
}
int main()
{
int h,w;
while(scanf("%d %d",&h,&w)!=EOF)
{
if(h==0&...
登录后发布评论
暂无评论,来抢沙发