解题思路:
注意事项:
参考代码:
#include<stdio.h>
int main()
{
int a,b;
while(~scanf("%d%d", &a, &b)){
int c[a][b];//建立长为 a 宽为 b 的数组(伪地图)
for(int i=0;i<a;i++){
char n[b];//长度为 b 的字符数组(用于接收每一行字符)
scanf("%s",&n);
for(int j=0;j<b;j++){//将字符数组中的信息存入 c[][]地图数组中
if(n[j]=='.')c[i][j]=1;
else if(n[j]=='#')c[i][j]=0;
}
}
c[0][0]=0;//默认起点已走过
int y=a*b;//地图总格数
int o[y],p[y],t=1,I=1;//o[]地图X轴坐标 p[]地图Y轴坐标 t检索点总数 I总步数
o[0]=p[0]=0;//设置检索起点
while(I<y){
I++;
int o1[y],p1[y];//o1[]地图X轴坐标 p1[]地图Y轴坐标 临时存储o[] p[]
for(int i=0;i<a*b;i++){
o1[i]=o[i];
p1[i]=p[i];
}
int t1=0;//下组检索点总数
for(int i=0;i<t;i++){
if(p1[i]-1>=0&&c[o1[i]][p1[i]-1]==1){//判断检索点“左侧 ”是否成立
c[o1[i]][p1[i]-1]=0;//以经过路径置零
o[t1]=o1[i];p[t1]=p1[i]-1;//记录下一组检索点
t1++;
}
if(p1[i]+1<b&&c[o1[i]][p1[i]+1]==1){//判断检索点“右侧 ” 是否成立
c[o1[i]][p1[i]+1]=0;
o[t1]=o1[i];p[t1]=p1[i]+1;
t1++;
}
if(o1[i]-1>=0&&c[o1[i]-1][p1[i]]==1){//判断检索点“上方 ” 是否成立
c[o1[i]-1][p1[i]]=0;
o[t1]=o1[i]-1;p[t1]=p1[i];
t1++;
}
if(o1[i]+1<a&&c[o1[i]+1][p1[i]]==1){//判断检索点“下方 ” 是否成立
c[o1[i]+1][p1[i]]=0;
o[t1]=o1[i]+1;p[t1]=p1[i];
t1++;
}
}
t=t1;//传递检索点总数
if(c[a-1][b-1]==0)break;//终点以被置零 退出循环
}
printf("%d\n",I);
}
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复