解题思路:利用广搜遍历
注意事项:由于’+‘‘-’不便于判断,所以将它们改成1,-1用于判断
参考代码:
#include<stdio.h>
struct op
{
int x;
int y;
int p;
int s;
}m[102];
int main()
{
char a[102][102];
int book[102][102]={0},er,eq,fl=1,fp=1,i,n,j,tx,ty,q[102][102],fz=0;
int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
scanf("%d",&n);
getchar();
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
scanf("%c",&a[i][j]);
getchar();
if(a[i][j]=='A')
{
q[i][j]=0;
er=i;
eq=j;
}
else
if(a[i][j]=='+')
{
q[i][j]=1;
}
else
if(a[i][j]=='B')
q[i][j]=0;
else
q[i][j]=-1;
}
m[fp].x=er;
m[fp].y=eq;
m[fp].p=0;
m[fp].s=0;
book[er][eq]=1;
fp++;
while(fl<fp)
{
for(i=0;i<4;i++)
{
tx = m[fl].x + next[i][0];
ty = m[fl].y + next[i][1];
if(tx < 1||tx > n||ty < 1||ty > n)
continue;
if(((q[m[fl].x][m[fl].y]+q[tx][ty]==0)||(q[m[fl].x][m[fl].y]*q[tx][ty]==0))&&(book[tx][ty]==0))
{
m[fp].x=tx;
m[fp].y=ty;
m[fp].p=fl;
m[fp].s=m[fl].s+1;
fp++;
book[tx][ty]=1;
}
if(a[tx][ty]=='B'){
fz=1;
break;
}
}
if(fz==1)
break;
fl++;
}
printf("%d",m[fp-1].s);
}
0.0分
0 人评分