自己自测没测出问题,但是在牛客网上就是通过一部分然后就段错误了。求大佬看看我哪里出问题了。
int zou();
int zongfen,o_hang,o_lie,N,M,P,Q;
char ditu[][128];
int main()
{
scanf("%d %d %d %d",&N,&M,&P,&Q);
//char ditu[N][M];
for(int i=0;i<N;i++)
{
for(int j=0;j<M;j++)
{
scanf(" %c",&ditu[i][j]);
if(ditu[i][j]=='S')//保存零点坐标
{
o_hang=i;
o_lie=j;
}
}
}
//printf("lingdianweizhi %d %d\n",o_hang,o_lie);
char luxian[128]={0};
scanf("%s",luxian);
int i=0;
while(*(luxian+i)!=0)
{
if(*(luxian+i)=='A')
{
o_lie -= 1;
if(o_lie<0)o_lie=0;
if(ditu[o_hang][o_lie]=='#')
{
o_lie += 1;
}
zou(ditu);
}
else if(*(luxian+i)=='S')
{
o_hang += 1;
if(o_hang>(N-1))o_hang=N-1;
if(ditu[o_hang][o_lie]=='#')
{
o_hang -= 1;
}
zou(ditu);
}
else if(*(luxian+i)=='D')
{
o_lie += 1;
if(o_lie>(M-1))o_lie=M-1;
if(ditu[o_hang][o_lie]=='#')
{
o_lie -= 1;
}
zou(ditu);
}
else if(*(luxian+i)=='W')
{
o_hang -= 1;
if(o_hang<0)o_hang=0;
if(ditu[o_hang][o_lie]=='#')
{
o_hang += 1;
}
zou(ditu);
}
i++;
}
//printf("ENDWEIZHI %d %d\n",o_hang,o_lie);
printf("%d\n",zongfen);
/*
for(int i=0;i<N;i++)//test 打印走过之后的地图
{
for(int j=0;j<M;j++)
{
printf("%c ",ditu[i][j]);
}
printf("\n");
}
//printf("%p\n",ditu);
*/
return 0;
}
int zou()//判断点是陷阱还是得分点
{
if(ditu[o_hang][o_lie]=='O')
{
//printf("O \n");
zongfen += P;
ditu[o_hang][o_lie]='+';
}
if(ditu[o_hang][o_lie]=='X')
{
//printf("Q \n");
zongfen -= Q;
ditu[o_hang][o_lie]='+';
}
//printf("```%p\n",ditu);
return 0;
}