码迷,mamicode.com
首页 > Web开发 > 详细

Fire Net

时间:2016-02-13 17:03:36      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:

#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

标签:

原文地址:http://www.cnblogs.com/wintersong/p/5187690.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!