20软件4班沈宇杰


私信TA

用户名:uq_13162411693

访问量:441

签 名:

等  级
排  名 2897
经  验 2113
参赛次数 20
文章发表 1
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

注意事项:

参考代码:

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

  评论区

  • «
  • »