解题思路:
采用了广度优先搜索




注意事项:





参考代码:

#include<stdio.h>

struct note {

int x;

int y;

int step;

};

int main() {

// freopen("C:\\cs.txt","r",stdin);

struct note que[100001];

int t;

scanf("%d",&t);

while(t--) {

int a[110][110] = {0},book[110][110] = {0};

int next[4][2] = {{0,1},

{1,0},

{0,-1},

{-1,0} };

int n,m,startx,starty,endx,endy,tx,ty;


scanf("%d%d",&n,&m);

getchar();

for(int i = 1; i <= n; i++) {

for(int j = 1; j <= m; j++) {

scanf("%c",&a[i][j]);

if(a[i][j] == 'S') {

startx = i;

starty = j;

}

if(a[i][j] == 'E') {

endx = i;

endy = j;

}

}

getchar();

}

int head,tail;

head = tail = 1;

que[tail].x = startx;

que[tail].y = starty;

que[tail].step = 0;

tail++;

book[startx][starty] = 1;

int flag =0;

while(head < tail) {

for(int k = 0; k < 4; k++) {                          //枚举四个方向

tx = que[head].x + next[k][0];

ty = que[head].y + next[k][1];

if(tx < 1 || tx > n ||                          //判断是否越界

ty < 1 || ty > m)

continue;

if(a[tx][ty] != '#' && book[tx][ty] == 0) {

book[tx][ty] = 1;

que[tail].x = tx;

que[tail].y = ty;

que[tail].step = que[head].step + 1;

tail++;

}

if(tx == endx && ty == endy) {

flag = 1;

break;

}

}

if(flag == 1)

break;

head++;                 //这个很重要哦,

}

if(head < tail)

printf("%d\n",que[tail-1].step);

else

printf("%d\n",-1);

}

return 0;

}


点赞(6)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 1 条评论

沐阳 6年前 回复TA
为啥运行没有结果