解题思路:利用广搜遍历
注意事项:由于’+‘‘-’不便于判断,所以将它们改成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语言代码)浏览:711 |
C语言训练-求1+2!+3!+...+N!的和 (C语言代码)浏览:822 |
校门外的树 (C语言代码)浏览:733 |
文科生的悲哀 (C语言代码)浏览:1538 |
局部变量作函数返回值的问题浏览:1028 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:571 |
简单的a+b (C语言代码)浏览:491 |
C语言程序设计教程(第三版)课后习题9.2 (C语言代码)浏览:646 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:683 |
C语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:736 |