解题思路:
注意事项:
参考代码:
#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分
1 人评分
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:658 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:783 |
字符串对比 (C语言代码)浏览:1471 |
Pascal三角 (C语言代码)格式错误浏览:551 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:624 |
输入输出格式练习 (C语言代码)浏览:773 |
数列排序 (C语言代码)浏览:674 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:444 |
WU-玉龙学长买雪糕 (C++代码)浏览:1155 |
Manchester- A+B for Input-Output Practice (I)浏览:1849 |