Red and Black
大意是只能走周围的4个相邻点,只能走黑色点,不能走红色点
输出最多可以走多少个不同的黑色点
#include
#include
using namespace std;
#define N 100
char rb[N][N];
bool mark[N][N];
void dfs(int n,int m,int& res,int x,int y){
if(mark[x][y]||rb[x][y]=='#'||x<0||x>n-1||y<0||y>m-1){
return;
}
mark[x][y]=true;
res+=1;
dfs(n,m,res,x-1,y);
dfs(n,m,res,x+1,y);
dfs(n,m,res,x,y-1);
dfs(n,m,res,x,y+1);
}
int main() {
freopen("in.txt","r",stdin);
int n,m,sx,sy,res;
while(1){
cin>>m>>n;
if(m==0&&n==0) break;
for(int i=0;ifor(int j=0;jcin>>rb[i][j];
if(rb[i][j]=='@'){
sx=i,sy=j;
}
mark[i][j]=false;
}
}
res=0;
dfs(n,m,res,sx,sy);
cout<return 0;
}
#include
#include
using namespace std;
#define N 21
char rb[N][N];
bool mark[N][N];
const int direct[4][2]={
{1,0},
{-1,0},
{0,1},
{0,-1}
};
void dfs(int n,int m,int x,int y,int &step){
if(rb[x][y]=='#'||mark[x][y]||x<0||x>n-1||y<0||y>m-1){
return;
}
step++;
mark[x][y]=true;
for(int d=0;d<4;d++){
int rx=x+direct[d][0];
int ry=y+direct[d][1];
dfs(n,m,rx,ry,step);
}
}
int main() {
freopen("in.txt","r",stdin);
int n,m,sx,sy,step;
while(1){
cin>>m>>n;
if(n==0&&m==0){
break;
}
for(int i=0;ifor(int j=0;jcin>>rb[i][j];
mark[i][j]=false;
if(rb[i][j]=='@'){
sx=i;
sy=j;
}
}
}
step=0;
dfs(n,m,sx,sy,step);
cout<return 0;
}