解题思路:

注意事项:

参考代码:

#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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论