Red and Black POJ - 1979
程序员文章站
2022-03-03 11:19:12
...
真的超级开心了,第一个完完全全自己写的dfs
#include<cstring>
#include<iostream>
using namespace std;
char a[25][25];
int ans=1;
int w,h;
void dfs(int x,int y){
if(x-1>=0&&x-1<h&&y>=0&&y<w&&a[x-1][y]=='.'){
a[x-1][y]='#';
ans++;
dfs(x-1,y);
}
if(x+1>=0&&x+1<h&&y>=0&&y<w&&a[x+1][y]=='.'){
a[x+1][y]='#';
ans++;
dfs(x+1,y);
}
if(x>=0&&x<h&&y-1>=0&&y-1<w&&a[x][y-1]=='.'){
a[x][y-1]='#';
ans++;
dfs(x,y-1);
}
if(x>=0&&x<h&&y+1>=0&&y+1<w&&a[x][y+1]=='.'){
a[x][y+1]='#';
ans++;
dfs(x,y+1);
}
return;
}
int main(){
while(cin>>w>>h&&w){
ans=1;
for(int i=0;i<h;i++)
scanf("%s",&a[i]);
for(int i=0;i<h;i++)
for(int j=0;j<w;j++)
if(a[i][j]=='@') {
dfs(i,j);
break;
}
cout<<ans<<endl;
}
}
改进版
#include<cstring>
#include<iostream>
using namespace std;
char a[25][25];
int dr[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int ans=1;
int h,w;//行,列
void dfs(int x,int y){
for(int i=0;i<4;i++){
int nx=x+dr[i][0];
int ny=y+dr[i][1];
if(nx>=0&&nx<h&&ny>=0&&ny<w&&a[nx][ny]=='.'){
a[nx][ny]='#';
ans++;
dfs(nx,ny);
}
}
return;
}
int main(){
while(cin>>w>>h&&w){//w是列,h是行
ans=1;
for(int i=0;i<h;i++)//行
scanf("%s",&a[i]);
for(int i=0;i<h;i++)//行
for(int j=0;j<w;j++)//列
if(a[i][j]=='@') {
dfs(i,j);
break;
}
cout<<ans<<endl;
}
}
推荐阅读
-
POJ 1979 Red And Black 红与黑DFS深搜 AC代码C++
-
ZOJ4048 Red Black Tree(The 2018 ACM-ICPC Asia Qingdao Regional Contest, Online,二分+LCA)
-
POJ3364 HDU1802 UVA11231 Black and white painting【数学】
-
Red and Black HDU 1312
-
Red and Black(DSF)
-
基础数据结构和算法十一:Red-black binary search tree
-
POJ - 1979 (dfs)
-
Red and Black——个人c++解
-
Red and Black-----BFS(水题)
-
dfs/bfs--Red and Black