首页 > 其他分享 >补基础题(BFS)

补基础题(BFS)

时间:2024-02-12 19:44:07浏览次数:27  
标签:nx begin vis 基础 next BFS ny step

P1135 奇怪的电梯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include<iostream> 
#include<queue>
#include<cstring>
using namespace std;
const int N=210;
int K[N],n,A,B,vis[N];
struct node{
    int now,step;
};
#define check(a) (a>=1&&a<=n)
void BFS(){
    node begin,next;
    begin.now=A;
    begin.step=0;
    vis[begin.now]=1;
    queue<node> q;
    q.push(begin);
    while(!q.empty()){
        begin=q.front();
        q.pop();
        if(begin.now==B){
            cout<<begin.step<<endl;
            return ;
        }
        int c;
        c=begin.now+K[begin.now];
        if(check(c)&&!vis[c]){
            vis[c]=1;
            next.now=c;
            next.step=begin.step+1;
            q.push(next);
        }
        c=begin.now-K[begin.now];
        if(check(c)&&!vis[c]){
            vis[c]=1;
            next.now=c;
            next.step=begin.step+1;
            q.push(next);
        }
    }
    cout<<"-1"<<endl;
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>n>>A>>B;
    for(int i=1;i<=n;i++) cin>>K[i];
    memset(vis,0,sizeof(vis));
    BFS();
    
    return 0;
}

P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include<iostream> 
#include<queue>
#include<cstring>
using namespace std;
const int INF=0x3f3f3f3f;
const int N=410;
int n,m,x,y,vis[N][N],s[N][N];
struct node{
    int dx,dy,step;
};
#define check(a,b) (a>=1&&a<=n&&b>=1&&b<=m)
void BFS(){
    node begin,next;
    begin.dx=x;
    begin.dy=y;
    begin.step=0;
    vis[begin.dx][begin.dy]=-INF;
    queue<node> q;
    q.push(begin);
    while(!q.empty()){
        begin=q.front();
        q.pop();
        int nx,ny;
        nx=begin.dx-1;
        ny=begin.dy+2;
        if(check(nx,ny)&&!vis[nx][ny]){
            next.dx=nx;
            next.dy=ny;
            next.step=begin.step+1;
            vis[nx][ny]=next.step;
            q.push(next);
        }
        nx=begin.dx-1;
        ny=begin.dy-2;
        if(check(nx,ny)&&!vis[nx][ny]){
            next.dx=nx;
            next.dy=ny;
            next.step=begin.step+1;
            vis[nx][ny]=next.step;
            q.push(next);
        }
        nx=begin.dx-2;
        ny=begin.dy+1;
        if(check(nx,ny)&&!vis[nx][ny]){
            next.dx=nx;
            next.dy=ny;
            next.step=begin.step+1;
            vis[nx][ny]=next.step;
            q.push(next);
        }
        nx=begin.dx-2;
        ny=begin.dy-1;
        if(check(nx,ny)&&!vis[nx][ny]){
            next.dx=nx;
            next.dy=ny;
            next.step=begin.step+1;
            vis[nx][ny]=next.step;
            q.push(next);
        }
        nx=begin.dx+1;
        ny=begin.dy+2;
        if(check(nx,ny)&&!vis[nx][ny]){
            next.dx=nx;
            next.dy=ny;
            next.step=begin.step+1;
            vis[nx][ny]=next.step;
            q.push(next);
        }
        nx=begin.dx+1;
        ny=begin.dy-2;
        if(check(nx,ny)&&!vis[nx][ny]){
            next.dx=nx;
            next.dy=ny;
            next.step=begin.step+1;
            vis[nx][ny]=next.step;
            q.push(next);
        }
        nx=begin.dx+2;
        ny=begin.dy+1;
        if(check(nx,ny)&&!vis[nx][ny]){
            next.dx=nx;
            next.dy=ny;
            next.step=begin.step+1;
            vis[nx][ny]=next.step;
            q.push(next);
        }
        nx=begin.dx+2;
        ny=begin.dy-1;
        if(check(nx,ny)&&!vis[nx][ny]){
            next.dx=nx;
            next.dy=ny;
            next.step=begin.step+1;
            vis[nx][ny]=next.step;
            q.push(next);
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(vis[i][j]==0){
                vis[i][j]=-1;
            }
        }
    }
    vis[x][y]=0;
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>n>>m>>x>>y;
    memset(vis,0,sizeof(vis));
    BFS();
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cout<<vis[i][j]<<"    ";
        }
        cout<<endl;
    }
    return 0;
}

hdu账号早日回归

 

标签:nx,begin,vis,基础,next,BFS,ny,step
From: https://www.cnblogs.com/accbulb/p/18014072

相关文章

  • 2024牛客寒假算法基础集训营2个人补题题解(K、D)
    比赛链接:2024牛客寒假算法基础集训营2K、TokitsukazeandPassword(easy)题面看着很难实际上只要暴力的东西,赛时看了眼题面就溜了血亏爆搜,枚举\(abcd\)和_可能的值,枚举的情况只有\(9*8*7*6*9=27216\)种。判断按照枚举出的对应值排列出的密码是否满足条件,满足就\(ans++\)写完......
  • 我在代码随想录|写代码| 贪心算法 | 理论基础, 455.分发饼干, 376. 摆动序列,53. 最大
    学习目标:博主介绍:27dCnc专题:数据结构帮助小白快速入门......
  • 第十九天:Mysql基础入门
    一、关系型数据库基础1、数据的分类结构化的数据   非结构化的数据  半结构化数据2、关系型数据库RDBMS (1)常用关系数据库 MySQL:MySQL,MariaDB,PerconaServerPostgreSQL:简称为pgsql,EnterpriseDBOracleMSSQLServerDB23、数......
  • 十四、MySQL与Django之Model基础
    数据库Django默认支持sqlite、mysql、oracel、postgresql等数据库1、sqlitedjango默认使用sqlite数据库Django.db.backends.sqlite3DATABASES={'default':{'ENGINE':'django.db.backends.sqlite3','NAME':os.path.join(BA......
  • python基础学习4
    异常处理try-excepttry-except-excepttry-except-except-elsetry-except-except-else-finally:raise关键字raiseException('自定义异常')异常类型ZeroDivisionError除数为零IndexError索引超出范围KeyError字典取值时key不存在NameError使用未声明变量Sy......
  • golang基础知识
    init函数是什么时候执行的init函数的作用是程序执行前包的初始化init函数执行顺序同一go文件中可以写多个init函数,按照代码顺序依次执行同一个package中,按照文件名(ASCII码顺序)顺序执行不同包且不互相依赖,按照import的顺序执行不同package中且互相依赖的,最后被依赖的最......
  • 三、网络基础
    一、网络协议互联网的本质就是一系列的网络协议互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层每层运行常见物理设备1、物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字02、数据链路层由来:单纯的电信号0和1没有任何意义,必须......
  • 2024牛客寒假算法基础集训营2 补题
    2024牛客寒假算法基础集训营2补题A.TokitsukazeandBracelet签到模拟参考代码:#include<bits/stdc++.h>usingnamespacestd;#definefffirst#definesssecond#defineebemplace_back#defineall(u)u.begin(),u.end()#defineendl'\n'#definedebug(x)cout......
  • 补基础题(快速幂)
    P1226【模板】快速幂-洛谷|计算机科学教育新生态(luogu.com.cn)#include<iostream>#include<cstring>usingnamespacestd;typedeflonglongll;lla,b,p;llquickpow(lla,llb){llans=1,base=a;while(b>0){if(b&1)ans=ans*base%p;......
  • 补基础题(排序)
    2299--Ultra-QuickSort(poj.org)#include<iostream>//归并排序#include<cstring>usingnamespacestd;typedeflonglongll;constintN=500010;inta[N],tmp[N],ans;voidmerge_(lll,llmid,llr){inti=l,j=mid+1,t=0;while(i<=mid&......