1216 红与黑
豁哗
画画的baby,画画的baby,奔驰的小野马和带刺的玫瑰。。。。。。
又做出来一道,很开森呐~~~
这道题其实和迷宫差不多,甚至要更简单一些,所以
老套路,地图,标记,方向,多了一个答案
答案就是每走一步黑就累加,求其最大值,说白了就是,尽量遍历全部的黑色方格并且要求其数目最大即可
上代码!!!
#include<bits/stdc++.h>
using namespace std;
int w, h;//方格大小
int sx, sy;//起始位置“@”的位置
char mp[25][25];//地图
char c;//字符
int ans;//答案
int fx[4][2]={{-1,0},{1,0},{0,-1},{0,1}};//方向
//函数遍历
void dfs(int x,int y){
mp[x][y]='#';//将自己走过的地方标记为红色,也就是说这一步已经走过了,不可以重复走
ans++;//每遍历一个黑色方格就加一
for(int i=0;i<4;i++){//方向遍历
int nx=x+fx[i][0];
int ny=y+fx[i][1];
if(nx>=0 && nx<h && ny>=0 && ny<w && mp[nx][ny]=='.')//限制条件:是否越界并且是否下一步的方格为黑色
dfs(nx,ny);
}
}
int main()
{
while(1){
cin>>w>>h;//方格大小
getchar();//过滤换行符
if(w==0 && h==0)break;//结束判断
for(int i=0;i<h;i++) cin>>mp[i];//输入
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
if(mp[i][j] == '@'){
sx=i , sy=j;//标记自己的初始位置
}
}
}
ans=0;//答案附初始值为0
dfs(sx,sy);
cout<<ans<<endl;//输出
}
return 0;
}