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;
 }
原文地址:https://www.cnblogs.com/qwn34/p/13732771.html