对BFS的感受

210人阅读 评论(0)

BFS的感受

我们在培训基地接触到的第一个名词是DFS，第二个是BFS。后来感触最深的是BFS

#include<stdio.h>

static int N1,N2,N3,M;

int panduan(int map[100][100][100],int a2,int a3,int a4,int bushu)

{

if(a2==N1-1&&a3==N2-1&&a4==N3-1)

{

if(bushu>M)

bushu=-1;

printf("%d\n",bushu);

return 0;

}

else if(bushu>N1*N2*N3)

{

printf("-1\n");

return 0;

}

else{

if(map[a2][a3][a4]==1)

return 0;

else

{

bushu++;                                                  //步数加一

map[a2][a3][a4]=1;

if(a2-1>=0) panduan( map,a2-1,a3,a4,bushu);                  //向外延伸

if(a2+1<=N1) panduan(map,a2+1,a3,a4,bushu);

if(a3-1>=0) panduan(map,a2,a3-1,a4,bushu);

if(a3+1<=N2-1) panduan(map,a2,a3+1,a4,bushu);

if(a4-1>=0) panduan(map,a2,a3,a4-1,bushu);

if(a4+1<=N3-1) panduan(map,a2,a3,a4+1,bushu);

}

}

}

void main()

{

int i1,map[100][100][100],i,j,k,N;

scanf("%d",&N);

for(i1=0;i1<N;i1++)

{

scanf("%d %d %d %d",&N1,&N2,&N3,&M);               //输入地图的大小

for(i=0;i<N1;i++)

{

for(j=0;j<N2;j++)

{

for(k=0;k<N3;k++)

scanf("%d",&map[i][j][k]);

}

}

panduan(map,0,0,0,0);

}

}

#include<stdio.h>
struct point
{int a1,a2,a3,count;
}queue[100000];
static map[100][100][100];
void enqueue(struct point p)                                             //插入队列
{
p.count++;
queue[tail++]=p;
}
struct point dequeue()                                                   //从队列取出
{
}
void visit(int a1,int a2,int a3,int count)                                         //对该点操作
{
struct point visit_point={a1,a2,a3,count};
map[a1][a2][a3]=1;
enqueue(visit_point);
}
void main()
{
int N,n,i,j,k,X,Y,Z,W;
struct point p;
scanf("%d",&N);
for(n=0;n<N;n++)
{
scanf("%d %d %d %d",&X,&Y,&Z,&W);
for(i=0;i<X;i++)
{
for(j=0;j<Y;j++)
{
for(k=0;k<Z;k++)
{
scanf("%d",&map[i][j][k]);
}
}
}
p.a1=0;p.a2=0;p.a3=0,p.count=0;
map[p.a1][p.a2][p.a3]=1;
enqueue(p);
{
p=dequeue();
if(p.a1==X-1&&p.a2==Y-1&&p.a3==Z-1)
break;
if(p.a1-1>=0&&map[p.a1-1][p.a2][p.a3]==0)
visit(p.a1-1,p.a2,p.a3,p.count);
if(p.a1+1<X&&map[p.a1+1][p.a2][p.a3]==0)
visit(p.a1+1,p.a2,p.a3,p.count);
if(p.a2-1>=0&&map[p.a1][p.a2-1][p.a3]==0)
visit(p.a1,p.a2-1,p.a3,p.count);
if(p.a2+1<Y&&map[p.a1][p.a2+1][p.a3]==0)
visit(p.a1,p.a2+1,p.a3,p.count);
if(p.a3-1>=0&&map[p.a1][p.a2][p.a3-1]==0)
visit(p.a1,p.a2,p.a3-1,p.count);
if(p.a3+1<Z&&map[p.a1][p.a2][p.a3+1]==0)
visit(p.a1,p.a2,p.a3+1,p.count);
}
p.count--;
if(p.a1==X-1&&p.a2==Y-1&&p.a3==Z-1)
{
if(p.count>W)
printf("-1\n");
else
printf("%d\n",p.count);
}
else
printf("-1\n");
}
}
(昨天上传错了，那个程序是我参考的刘敏的，这个才是我做的程序)

0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：43918次
• 积分：832
• 等级：
• 排名：千里之外
• 原创：41篇
• 转载：0篇
• 译文：0篇
• 评论：5条
文章分类
阅读排行
最新评论