Fire Net

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}

 

以上是关于Fire Net的主要内容,如果未能解决你的问题,请参考以下文章

深搜(DFS),回溯,Fire Net

HDU 1045 Fire Net (BFS)

UVA 11624 Fire

HDU 1045 Fire Net (二分匹配)

ASP.NET WebApi 中的 Fire-forget 和单向调用

ACM--DFS--最大碉堡数--HDOJ 1045--Fire Net