解题思路:
就是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++代码)浏览:730 |
剔除相关数 (C语言代码)浏览:1058 |
C二级辅导-进制转换 (C语言代码)浏览:657 |
简单的a+b (C语言代码)浏览:719 |
C语言训练-计算一个整数N的阶乘 (C语言代码)浏览:986 |
求圆的面积 (C语言代码)浏览:1366 |
校门外的树 (C语言代码)浏览:988 |
C语言程序设计教程(第三版)课后习题6.8 (C++代码)浏览:614 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:683 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:597 |