首页 > 编程语言 >c++ class类bfs模板题目

c++ class类bfs模板题目

时间:2023-05-14 09:46:18浏览次数:48  
标签:node sy sx int c++ bfs vis class

题目网址:走迷宫 - 题目 - Liuser's OJ (cpolar.cn)

原本代码(bfs广度优先搜索):

#include<bits/stdc++.h>

using namespace std;

const int N=50;
int n,m;
int sx,sy;
char a[N][N];
int b[N][N];
bool vis[N][N];
int dx[]={1,0,-1,0};
int dy[]={0,-1,0,1};
struct node{
    int x;
    int y;
};
queue<node> q;

int bfs(int x,int y){
    node s={x,y};
    q.push(s);
    while(!q.empty()){
        node t=q.front();
        q.pop();
        if(a[t.x][t.y]=='T') return b[t.x][t.y];
        for(int i=0;i<4;i++){
            node nt;
            nt.x=t.x+dx[i];
            nt.y=t.y+dy[i];
            if(nt.x>=1 and nt.y>=1 and nt.x<=n and nt.y<=m and vis[nt.x][nt.y]==false and a[nt.x][nt.y]!='#'){
                vis[nt.x][nt.y]=true;
                b[nt.x][nt.y]=b[t.x][t.y]+1;
                q.push(nt);
            }
        }
    }
    return -1;
}    

int main(){
    memset(b,0,sizeof(b));
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
            if(a[i][j]=='S') sx=i,sy=j;
        }
    }
    vis[sx][sy]=true;
    int ans=bfs(sx,sy);
    printf("%d\n",ans);
    return 0;
}

 然后我花了大概三个两分半写成了昨天自学学的类(我不知道为什么编程老师不教类):

#include<bits/stdc++.h>

using namespace std;

const int N=60;
int dx[]={1,0,-1,0};
int dy[]={0,-1,0,1};
int sx,sy;
struct node{
    int x;
    int y;
};
queue<node> q;

class Box{
    public:
        int n,m;
        char a[N][N];
        int vis[N][N];
        int sr(){
            int sx,sy;
            memset(vis,0,sizeof(vis));
            for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                    cin>>a[i][j];
                    if(a[i][j]=='S') sx=i,sy=j;
                }
            }
            return bfs(sx,sy);
        }
        int bfs(int x,int y){
            vis[x][y]=1;
            node s={x,y};
            q.push(s);
            while(!q.empty()){
                node t=q.front();
                q.pop();
                if(a[t.x][t.y]=='T') return vis[t.x][t.y]-1;
                for(int i=0;i<4;i++){
                    node nt;
                    nt.x=t.x+dx[i];
                    nt.y=t.y+dy[i];
                    if(nt.x>=1 and nt.y>=1 and nt.x<=n and nt.y<=m and vis[nt.x][nt.y]==0 and a[nt.x][nt.y]!='#'){
                        vis[nt.x][nt.y]=vis[t.x][t.y]+1;
                        q.push(nt);
                    }
                }
            }
            return -1;
        }
};

int main(){
    Box box;
    cin>>box.n>>box.m;
    int ans;
    ans=box.sr();
    cout<<ans<<endl;
    return 0;
}

感谢你看到这里!点个赞再走吧!!

标签:node,sy,sx,int,c++,bfs,vis,class
From: https://www.cnblogs.com/thjblogs/p/17398775.html

相关文章

  • 南桥杯C++AB组:递归
    目标:200到300道;目前:已学知识点:本文概述:cin|cout对比scanf|printf的区别使用前者,由于其有缓冲池,相对于后者,响应时间会长很多分析递归所有递归,都可以转化为一棵递归搜索树;......
  • C/C++中的强符号和弱符号
    C/C++中的强符号和弱符号先看如下场景//在1.c中定义了全局变量intg=1;intg2;同时//在2.c中也定义了全局变量intg=1;doubleg2;对上边C文件编译时会报符号重复定义(MultipleDefinition)的错误,这是因为在多个源文件中定义了同名的全局变量,且都已初始化。报错如下......
  • C++趣味编程
    折半查找。1#include<iostream>2usingnamespacestd;3#defineN104intmain()5{6inti,a[N]={-3,4,7,9,13,45,67,89,100,180},low=0,high=N-1,mid,k=-1,m;7cout<<"a数组中数据如下"<<endl;8for(inti=0;i<N;i++)......
  • wsl中c++环境配置
    sudoapt-getinstallnodejssudoapt-getinstallnpmsudoapt-getinstallclangd-12Gettingstarted(llvm.org) ......
  • c++练习
    #include<iostream>usingnamespacestd;classtime{public: inthour; intminute; intsec;};intmain(){ timet1; cin>>t1.hour; cin>>t1.minute; cin>>t1.sec; cout<<t1.hour<<":"; cout<<t1.minute<<":......
  • c/c++零基础坐牢第十一天
    c/c++从入门到入土(11)开始时间2023-05-13 12:24:38结束时间2023-05-13 16:21:58 前言:说到指针,我也显得像个初学者,《深入理解计算机系统》之3.10“综合:理解指针”这样说:“指针……以一种统一方式,对不同数据结构中的元素产生引用”。也有人这么说“当函数以数据的指针为参数时,......
  • C++ OpenCV安装教程
    C++OpenCV编译安装教程环境说明win10+MinGW64+Cmake下载mingw64(版本:12.1.0posix-seh)下载Cmake(版本3.17.5)注:mingw64和cmake下载安装完成后记得把bin目录添加到【环境变量】,如:下载opencv(版本4.6.0,下载后双击exe,选择目录进行解压即可)GitHub加速链接(复制下......
  • 【C++】继承(上)
    @TOC1.继承的使用若有好多类,都有公共的特征,将类中的特性提取出来专门放在一个类中,这个类一般叫做基类或者父类public作为继承方式继承方式共有三种:publicprotectedprivateStuent类内部虽然没有实现name和age,但是它继承了person父类的name和age父类可以叫做基类,子类也可以......
  • 用C++编写一个简单的程序
    本篇文章将介绍如何使用C++编写一个简单的程序,该程序可以接收用户输入并将其转换为整数。在C++中,可以使用标准库中的<iostream>头文件来输出和输入数据。以下是一个简单的C++程序,可以读取用户输入,并将其转换为整数:#include<iostream>usingnamespacestd;intmain(){......
  • C++傅里叶变换
    #include<stdio.h>#include<math.h>#definepi3.1415926typedefstruct{floatre;//reallyfloatim;//imaginary}complex,*pcomplex;complexcomplexadd(complexa,complexb)//复数加{complexrt;rt.re=a.re+b.re;......