break;
}
}
}
void deal()
{
int i,j,base,top,x,y,xend,yend;
int queue[100000][2];
int sum[50][50];
memset(status,0,sizeof(status));
memset(sum,0,sizeof(sum));
base=top=0;
queue[top][0]=pos_stax; queue[top++][1]=pos_stay;
sum[pos_stax][pos_stay]=1; status[pos_stax][pos_stay]=1;
while(base
x=queue[base][0]; y=queue[base++][1];
for(i=0;i<=3;i++)
{
xend=x+vex1[i]; yend=y+vey1[i];
if(xend>=1&&xend<=n& d>=1& d<=m&&!status[xend][yend]&&a[xend][yend])
{
sum[xend][yend]=sum[x][y]+1;
status[xend][yend]=1;
queue[top][0]=xend; queue[top++][1]=yend;
if(xend==pos_endx& d==pos_endy)
{
break;
}
}
}
if(i!=4)
{
break;
}
}
res3=sum[pos_endx][pos_endy];
}
左右方向放在一个函数中处理。
[cpp]
#include
#include
using namespace std;
int bx1[]={0,0,-1,1},by1[]={-1,1,0,0};
int bx2[]={0,0,1,-1},by2[]={1,-1,0,0};
int vectorx[]={-1,1,0,0},vectory[]={0,0,1,-1};
int status[50][50],a[50][50],res1,res2,res3,pos_stax,pos_stay,pos_endx,pos_endy;
int n,m;
int main()
{
void deal_left_Or_right(int vex1[5],int vey1[5],int vex2[5],int vey2[5],int &k);
void deal();
int i,j,s,t;
char c;
cin>>t;
while(t--)
{
cin>>m>>n;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
cin>>c;
if(c=='#')
{
a[i][j]=0;
}else if(c=='S')
{
a[i][j]=0;
}else if(c=='E')
{
a[i][j]=1;
pos_endx=i; pos_endy=j;
}else if(c=='.')
{
a[i][j]=1;
}
}
}
deal_left_Or_right(bx1,by1,bx2,by2,res1);
deal_left_Or_right(bx2,by2,bx1,by1,res2);
deal();
cout<
return 0;
}
void deal_left_Or_right(int vex1[5],int vey1[5],int vex2[5],int vey2[5],int &k)
{
int i,j,x1,y1,x2,y2,x3,y3,s,x4,y4,t,temp1,temp2;
s=2; x1=pos_stax; y1=pos_stay;
for(i=0;i<=3;i++)
{
x2=x1+vex1[i]; y2=y1+vey1[i];
if(x2>=1&&x2<=n&&y2>=1&&y2<=m&&a[x2][y2])
{
break;
}
}
while(1)
{
x4=x2-x1; y4=y2-y1;
if(x4<0&&y4==0)
{
t=0;
}else if(x4>0&&y4==0)
{
t=1;
}else if(x4==0&&y4>0)
{
t=2;
}else if(x4==0&&y4<0)
{
t=3;
}
if(a[x2+vex1[t]][y2+vey1[t]])
{
x1=x2; y1=y2;
x2=x2+vex1[t]; y2=y2+vey1[t];
s+=1;
}else
{
x3=x2+vectorx[t]; y3=y2+vectory[t];
if(a[x3][y3])
{
x1=x2; y1=y2;
x2=x3; y2=y3;
}else
{
x3=x2+vex2[t]; y3=y2+vey2[t];
if(a[x3][y3])
{
x1=x2; y1=y2;
x2=x3; y2=y3;
}else
{