トピックリンクします。https://nanti.jisuanke.com/t/T1212
#include<stdio.h>
struct pos{
int x;
int y;
int len;
};
int flag;
struct pos que[10010];
char bfs[25][25];
int book[25][25];
int move[4][2]={{0,-1},{0,1},{1,0},{-1,0}};
int main(){
int m,n,head,tail;
scanf("%d %d",&m,&n);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
scanf(" %c",&bfs[i][j]);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
if(bfs[i][j]=='@')
{
que[0].x=i;
que[0].y=j;
}
}
que[head].len=0;
tail++;
book[que[0].x][que[0].y]=1;
while(head<tail){
for(int i=0;i<4;i++){
if(book[que[head].x+move[i][0]][que[head].y+move[i][1]]==1){
continue;
}
if(bfs[que[head].x+move[i][0]][que[head].y+move[i][1]]=='#'){
continue;
}
if(que[head].x+move[i][0]>=0&&que[head].y+move[i][1]>=0&&que[head].x+move[i][0]<m&&que[head].y+move[i][1]<n){
que[tail].x=que[head].x+move[i][0];
que[tail].y=que[head].y+move[i][1];
que[tail].len=que[head].len+1;
book[que[head].x+move[i][0]][que[head].y+move[i][1]]=1;
tail++;
}
if(bfs[que[tail-1].x][que[tail-1].y]=='*'){
flag=1;
break;
}
}
if(flag==1){
printf("%d ",que[tail-1].len);
break;
}
head++;
}
if(flag==0){
printf("-1");
}
return 0;
}