样例过,提交40分,不知道什么问题.

#include<bits/stdc++.h>
using namespace std;
int main()
{
for(int i=1;;i++)
{
int front=0,tail=1,dui[500][2]={0},p[500][500]={0},c[500]={0},shu,heng;
char a[30][30]={'\0'};
cin>>heng>>shu;
if(heng==0&&shu==0) break;
for(int i_heng=1;i_heng<=heng;i_heng++)
{
for(int i_shu=1;i_shu<=shu;i_shu++)
{
cin>>a[i_heng][i_shu];
if(a[i_heng][i_shu]=='@')
{
dui[1][0]=i_heng;
dui[1][1]=i_shu;
p[i_heng][i_shu]=1;
c[1]=0;
}
}
}
while(front<tail)
{
front++;
int x=dui[front][0],y=dui[front][1];
if(a[x+1][y]=='.'&&p[x+1][y]==0) //向下
{
p[x+1][y]=1;
tail++;
dui[tail][0]=x+1;
dui[tail][1]=y;//入队
c[tail]=c[front]+1;//层加1
}
else if(a[x+1][y]=='*')
{
cout<<c[front]+1<<endl;
break;
}
if(a[x][y+1]=='.'&&p[x][y+1]==0) //向右
{
p[x][y+1]=1;
tail++;
dui[tail][0]=x;
dui[tail][1]=y+1;//入队
c[tail]=c[front]+1;//层加1
}
else if(a[x][y+1]=='*')
{
cout<<c[front]+1<<endl;
break;
}
if(a[x-1][y]=='.'&&p[x-1][y]==0) //向上
{
p[x-1][y]=1;
tail++;
dui[tail][0]=x-1;
dui[tail][1]=y;//入队
c[tail]=c[front]+1;//层加1
}
else if(a[x-1][y]=='*')
{
cout<<c[front]+1<<endl;
break;
}
if(a[x][y-1]=='.'&&p[x][y-1]==0) //向左
{
p[x][y-1]=1;
tail++;
dui[tail][0]=x;
dui[tail][1]=y-1;//入队
c[tail]=c[front]+1;//层加1
}
else if(a[x][y-1]=='*')
{
cout<<c[front]+1<<endl;
break;
}
}
if(front==tail) cout<<-1<<endl;
}
return 0;
}