欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Fire Net

程序员文章站 2022-06-23 08:38:49
思路这里矩阵最多也只有4*4,所以直接暴力dfs即可,具体看代码代码#include #include #include using namespace std;char f[10][10];int ans;int now[10][10];int n;bool solve(int x,int y){ bool flag=true; for(int i=x-1;i>=...

思路

  • 这里矩阵最多也只有4*4,所以直接暴力dfs即可,具体看代码

代码

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
char f[10][10];
int ans;
int now[10][10];
int n;
bool solve(int x,int y){
    bool flag=true;
    for(int i=x-1;i>=0&&flag;i--){
        if(f[i][y]=='X')break;
        if(now[i][y])flag=false;
    }
    for(int i=x+1;i<n&&flag;i++){
        if(f[i][y]=='X')break;
        if(now[i][y])flag=false;
    }
    for(int i=y-1;i>=0&&flag;i--){
        if(f[x][i]=='X')break;
        if(now[x][i])flag=false;
    }
    for(int i=y+1;i<n&&flag;i++){
        if(f[i][y]=='X')break;
        if(now[i][y])flag=false;
    }
    return flag;
}
void dfs(int k,int num){
    int x=k/n;
    int y=k%n;
    if(k>=n*n){
        ans=max(num,ans);
        return;
    }
    if(f[x][y]!='X'&&solve(x,y)){
        now[x][y]=1;
        dfs(k+1,num+1);
        now[x][y]=0;
    }
    dfs(k+1,num);
}
int main(){
    while(cin >> n,n){
        memset(now,0,sizeof now);
        ans=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                cin >> f[i][j];
            }
        }
        dfs(0,0);
        cout << ans << "\n";
    }
}

本文地址:https://blog.csdn.net/weixin_45080867/article/details/107893820