解题思路:
就是bfs,但我就不知道哪里错了,求路过的大神求解
注意事项:
参考代码:
#include<stdio.h>
#define max 101
char map[max][max];//地图
int book[max][max];//标记是否走过
int next[4][2]={1,0,-1,0,0,1,0,-1};//四个方向
int min=-1,M,N,sx,sy,ex=-1,ey=-1;//最短时间,行,列,起点和终点
//纯C没有类,不想打链表就只能用数组当做队列
struct{
int x,y,s;
}quee[max*max+1],now;
void bfs()
{
int i,head=-1,real=0,tx,ty;
quee[0].x=sx;
quee[0].y=sy;
quee[0].s=0;
book[sx][sy]=1;
while(head<real)
{
//出队
now=quee[++head];
tx=now.x;
ty=now.y;
//找到,更新最小值并退出
if(tx==ex&&ty==ey)
{
min=now.s;
return ;
}
for(i=0;i<4;i++)
{
tx=now.x+next[i][0];
ty=now.y+next[i][1];
//判断是否已走过或者是否越界
if(!book[tx][ty])
{
if(tx<0||tx>=M||ty<0||ty>=N) continue;
//标记并入队
book[tx][ty]=1;
quee[++real].x=tx;
quee[real].y=ty;
quee[real].s=now.s+1;
}
}
}
}
int main()
{
int i,j;
scanf("%d%d",&M,&N);
for(i=0;i<M;i++)
{
getchar();//接收回车
for(j=0;j<N;j++)
{
scanf("%c",&map[i][j]);
if(map[i][j]=='@')
{
sx=i;
sy=j;
}
if(map[i][j]=='*')
{
ex=i;
ey=j;
}
if(map[i][j]=='#')
book[i][j]=1;
}
}
bfs();
if(min==-1) printf("Impossibility!");
else printf("%d",min);
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复