zoukankan      html  css  js  c++  java
  • Fire Net

    #include<iostream>
    #include<string>
    #include<string.h>
    #include<math.h>
    #include<cstdio>
    #include<stack>
    #include<queue>
    #include<set>
    using namespace std;
    char mapp[5][5];
    int best,n;
    int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
    bool canPut(int x,int y){
        //第x行,第y列
        for(int i=y-1;i>=0;i--){
            if(mapp[x][i]=='1') return false;
            if(mapp[x][i]=='X') break;
        }
        for(int i=x-1;i>=0;i--){
            if(mapp[i][y]=='1') return false;
            if(mapp[i][y]=='X') break;
        }
        return true;
    }
    void  dfs(int k,int current){
      //cout<<k<<"  "<<current<<endl;
        if(k==n*n){
    
            if(best<current){
                best=current;
               // cout<<best<<"  best"<<endl;
                return ;
            }
        }
        else{
        int x=k/n;
        int y=k%n;
         // if(k==2) cout<<x<<"  "<<y<<"  2"<<endl;
        if(mapp[x][y]=='.'&&canPut(x,y)){
            mapp[x][y]='1';
           // cout<<x<<"  "<<y<<"放置跑  "<<endl;
            dfs(k+1,current+1);
            mapp[x][y]='.';
        }
        dfs(k+1,current);
        }
    
    }
    int main(){
        while(cin>>n){
            memset(mapp,0,sizeof(mapp));
            if(n==0) break;
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    cin>>mapp[i][j];
                }
            }
    
            best=0;
            dfs(0,0);
            cout<<best<<endl;
    
        /*深度优先搜索:每次遍历全局,注意回溯,规定放了炮弹的为1,不放的为0
        找到最大的数目。
        判断能不能放
        */
        }
    
       return 0;
    }
  • 相关阅读:
    SpringJDBC源码分析记录
    RHEL7使用NAT方式上网
    SQL优化参考
    IDEA引入Gradle工程小记
    OAuth2.0原理与实现
    sudo用法记录
    ZooKeeper单机伪集群搭建与启动
    Netty实践与NIO原理
    Spring Security原理与应用
    Winform 生成不需要安装的exe可执行文件 ILMerge使用
  • 原文地址:https://www.cnblogs.com/wintersong/p/5187690.html
Copyright © 2011-2022 走看看