suxxsfe

一言(ヒトコト)

东方博宜OJ1897: 【入门】红与黑题解

深搜基础题,用string存储即可。
\(50pts:\)(下标为\(1\)用惯了)

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
string a[21];
int w,h,vis[21][21],cnt=0;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
void dfs(int x,int y){
    vis[x][y]=1;
    cnt++;
    for(int i=0;i<4;i++){
        int nx,ny;
        nx=x+dx[i];
        ny=y+dy[i];
        if(nx>=1&&nx<=h&&ny>=1&&ny<=w&&!vis[nx][ny]&&a[nx][ny]!='#'){
            vis[nx][ny]=1;
            dfs(nx,ny);
        }
    }
}
int main(){
    cin>>w>>h;
    int sx,sy;
    for(int i=1;i<=h;i++){
        cin>>a[i];
        for(int j=1;j<=w;j++){
            if(a[i][j]=='@'){
                sx=i;
                sy=j;
            }
        }
    }
    dfs(sx,sy);
    cout<<cnt;
    return 0;
}

\(100pts:\)

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
string a[21];
int w,h,vis[21][21],cnt=0;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
void dfs(int x,int y){
    vis[x][y]=1;//标记
    cnt++;
    for(int i=0;i<4;i++){
        int nx,ny;
        nx=x+dx[i];
        ny=y+dy[i];
        if(nx>=1&&nx<=h&&ny>=0&&ny<=w-1&&!vis[nx][ny]&&a[nx][ny]!='#'){//判断能不能走
            vis[nx][ny]=1;
            dfs(nx,ny);
        }
    }
}
int main(){
    cin>>w>>h;
    int sx,sy;
    for(int i=1;i<=h;i++){
        cin>>a[i];
        for(int j=0;j<=w-1;j++){
            if(a[i][j]=='@'){//确定开始位置
                sx=i;
                sy=j;
            }
        }
    }
    dfs(sx,sy);
    cout<<cnt;
    return 0;//完结撒花
}
posted @ 2021-08-03 15:40  卫道士qwq  阅读(1390)  评论(0)    收藏  举报