2024年C C++最全BFS经典例题合集_bfs例题,2024年最新字节跳动+京东+美团+腾讯面试总结

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

        if(v.check()&&flag[v.x][v.y][v.z]==false){               
            flag[v.x][v.y][v.z]=true;  
            if(v.x==e.x&&v.y==e.y&&v.z==e.z)  
                return v.step;  
            if(str[v.x][v.y][v.z]=='X')  
                continue;  
            que.push(v);  
        }  
    }  
}  
return -1;  

}
char ch[100];
int main(){
while(scanf(“%s%d”,ch,&n)!=EOF){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf(“%s”,str[i][j]);
while(scanf(“%s”,ch)){
if(strcmp(ch,“END”)0)
break;
sscanf(ch,“%d”,&s.x);
scanf(“%d%d%d%d%d”,&s.y,&s.z,&e.x,&e.y,&e.z);
int ans=bfs();
if(ans
-1)
printf(“NO ROUTE\n”);
else
printf(“%d %d\n”,n,ans);
}

}  
return 0;  

}


HDU 1728 限制拐弯次数


[cpp] view plain copy



#include
#include
#include
#include
#define LL unsigned long long
using namespace std;
int n,m,k;
int way[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
char str[105][105];
bool flag[105][105];
struct Node{
int x,y,dir,cnt;
bool check(){
if(x>=0&&x<n&&y>=0&&y<m)
return true;
return false;
}
}s,e,u,v;
int bfs(){
queueque;
que.push(s);
memset(flag,false,sizeof(flag));
flag[s.x][s.y]=true;
while(!que.empty()){
u=que.front();
que.pop();
for(int i=0;i<4;i++){
v.cnt=u.cnt;
if(u.dir!=-1&&u.dir!=i)
v.cnt++;
if(v.cnt>k)
continue;
v.dir=i;
for(int j=1;;j++){
v.x=u.x+way[i][0]*j;
v.y=u.y+way[i][1]j;
if(v.check()&&str[v.x][v.y]!='
'){
if(flag[v.x][v.y])
continue;
flag[v.x][v.y]=true;
if(v.xe.x&&v.ye.y)
return true;
que.push(v);
}
else
break;
}
}
}
return false;
}
int main(){
int t;
scanf(“%d”,&t);
while(t–){
scanf(“%d%d”,&n,&m);
for(int i=0;i<n;i++)
scanf(“%s”,str[i]);
scanf(“%d%d%d%d%d”,&k,&s.y,&s.x,&e.y,&e.x);
s.x–;s.y–;e.x–;e.y–;
s.cnt=0;s.dir=-1;
if((s.xe.x&&s.ye.y)||bfs())
printf(“yes\n”);
else
printf(“no\n”);
}
return 0;
}


HDU 1242 BFS+优先队列


[cpp] view plain copy



#include
#include
#include
#include
#include
#define LL long long
using namespace std;
struct Node{
int x,y,step;
bool operator<(const Node &n1)const{
return step>n1.step;
}
}s,e,u,v;
int n,m;
char str[205][205];
int way[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int bfs(){
priority_queueque;
bool flag[205][205];
memset(flag,0,sizeof(flag));
s.step=0;
que.push(s);
flag[s.x][s.y]=1;
while(!que.empty()){
u=que.top();
que.pop();
for(int i=0;i<4;i++){
v.x=u.x+way[i][0];
v.y=u.y+way[i][1];
if(v.x>=0&&v.y>=0&&v.x<n&&v.y<m&&flag[v.x][v.y]0&&str[v.x][v.y]!=‘#’){
flag[v.x][v.y]=1;
if(str[v.x][v.y]
‘x’)
v.step=u.step+2;
else
v.step=u.step+1;
if(v.xe.x&&v.ye.y)
return v.step;
que.push(v);
}
}
}
return -1;
}
int main(){
while(scanf(“%d%d”,&n,&m)!=EOF){
for(int i=0;i<n;i++){
scanf(“%s”,str[i]);
for(int j=0;j<m;j++)
if(str[i][j]‘a’){
s.x=i;
s.y=j;
}
else if(str[i][j]
‘r’){
e.x=i;
e.y=j;
}
}
int ans=bfs();
if(ans==-1)
printf(“Poor ANGEL has to stay in the prison all his life.\n”);
else
printf(“%d\n”,ans);
}
return 0;
}


HDU 1429 BFS+二进制压缩


[cpp] view plain copy



#include
#include
#include
#include
#include
#define LL unsigned long long
using namespace std;
int n,m,T;
int way[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
char str[21][21];
bool flag[21][21][1024];
struct Node{
short x,y,step;
short key;
bool check(){
if(x>=0&&x<n&&y>=0&&y<m)
return true;
return false;
}
}s,e,u,v;
queueque;
int bfs(){
if(!que.empty())
que.pop();
que.push(s);
memset(flag,false,sizeof(flag));
while(!que.empty()){
u=que.front();
que.pop();

    for(int i=0;i<4;i++){  
        v=u;  
        v.step++;  
        v.x+=way[i][0];  
        v.y+=way[i][1];   

        if(v.step>=T)  
            break;  
        if(v.check()&&str[v.x][v.y]!='*'){  
            if(str[v.x][v.y]=='^')  
                return v.step;  
            if(str[v.x][v.y]>='A'&&str[v.x][v.y]<='J'){  
                if(((1<<(str[v.x][v.y]-'A'))&v.key)&&flag[v.x][v.y][v.key]==false){  
                    que.push(v);  
                    flag[v.x][v.y][v.key]=true;  
                }  
            }  
            else if(str[v.x][v.y]>='a'&&str[v.x][v.y]<='j'){  
                v.key|=(1<<(str[v.x][v.y]-'a'));  
                if(flag[v.x][v.y][v.key]==false){             
                    que.push(v);  
                    flag[v.x][v.y][v.key]=true;  
                }  
            }  
            else{  //相当于空地  
                if(!flag[v.x][v.y][v.key]){  
                    flag[v.x][v.y][v.key]=true;  
                    que.push(v);  
                }  
            }  
        }  

    }  
}  
return -1;  

}
int main(){
while(scanf(“%d%d%d”,&n,&m,&T)!=EOF){
for(int i=0;i<n;i++){
scanf(“%s”,str[i]);
for(int j=0;j<m;j++){
if(str[i][j]==‘@’){
s.x=i;
s.y=j;
s.step=0;
s.key=0;
}
}
}
printf(“%d\n”,bfs());
}
return 0;
}




![img](https://img-blog.csdnimg.cn/img_convert/f9fd6be7cb3c50870feccf3a61d92025.png)
![img](https://img-blog.csdnimg.cn/img_convert/84f7a55b64765df6d7c331ac36dbdf3f.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

``



[外链图片转存中...(img-r64crr6r-1715522036876)]
[外链图片转存中...(img-s5V1YR6D-1715522036877)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值