A - Fire Net(DFS)

A - Fire Net(DFS)

题意:给地图,问最多能放多少炮台,炮台不能互相攻击(有墙或者不在同一行或同一列)

思路:从左到右,从上到下将每个点做为起点开始搜,如果从某一个点开始搜,它之前的点是不用搜的,因为若

它之前有点可以作为炮台,说明这个点已经被搜过了。所以这种搜法是正确的。这里有个简化的技巧,用一维编号表示二维坐标 以作为起点,记它的编号为,依次类推的编号为

当前编号的坐标为.用两个数组分别标记行列,来维护整个地图即可。

AC代码:

#include<cstdio>
#include<cstring>
using namespace std;
const int N=505;
char mp[N][N];
int r[N],c[N],n,ans; 
void dfs(int id,int sum){
    if(id==n*n)//终止条件. 
    {
         if(sum>ans) ans=sum;
         return ;
    }
    int x=id/n,y=id%n;
    if(mp[x][y]=='X') r[x]=c[y]=0;
    if(mp[x][y]=='.'&&!r[x]&&!c[y]){
        mp[x][y]='Y';
        r[x]=c[y]=1;
        dfs(id+1,sum+1);
        mp[x][y]='.';//回溯 
        r[x]=c[y]=0;
    }
    dfs(id+1,sum);
}
int main(){
    while(~scanf("%d",&n)&&n)
    {
        ans=0;
        for(int i=0;i<n;i++)
            scanf("%s",mp[i]);
        dfs(0,0);
        printf("%d\n",ans);
    }
        return 0; 
} 
全部评论

相关推荐

学java时间比较短不到三个月,基本的技术栈都过了一遍就是都不太深,有个小项目。是继续找实习还是沉淀准备秋招呢?找实习的话会花很多时间在八股,放弃的话又怕秋招简历太难看。有无大佬支招
今天java了吗:1.一定要找实习,实习不一定要去,但是找实习过程中的面试经验和心态经验才是最重要的 2.八股本来就是大头,甚至比项目重要 3.这个时间段也是面试比较多的阶段,可以抓住机会锻炼。面试才会发现自己的不足,感觉自己会了和能给面试官娓娓道来是两码事
点赞 评论 收藏
分享
迟缓的斜杠青年巴比Q了:简历被投过的公司卖出去了,我前两天遇到过更离谱的,打电话来问我有没有意向报班学Java学习,服了,还拿我学校一个学长在他们那报班学了之后干了华为OD当招牌
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务