東方博宜OJ1897: 【入門】紅與黑題解
阿新 • • 發佈:2021-08-03
深搜基礎題,用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;//完結撒花 }