解题思路:利用广搜遍历
注意事项:由于’+‘‘-’不便于判断,所以将它们改成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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复