zoukankan      html  css  js  c++  java
  • hdu1045 Fire Net

    在一张地图上建立碉堡(X),要求每行没列不能放两个,除非中间有强挡着。求最多能放多少个碉堡

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define N 5
    using namespace std;
    
    int n,ans;
    char maps[N][N];
    
    int judge(int x,int y)
    {
        int i;
        if(maps[x][y]=='X')
            return 0;
        for(i=y;i>=0;i--)
        {
            if(maps[x][i]=='D')
                return 0;
            if(maps[x][i]=='X')
                break;
        }
        for(i=x;i>=0;i--)
        {
            if(maps[i][y]=='D')
                return 0;
            if(maps[i][y]=='X')
                break;
        }
        return 1;
    }
    
    void DFS(int step,int k)
    {
        int x,y;
        x=step/n;
        y=step%n;
        if(step==n*n)
        {
            ans=max(k,ans);
            return ;
        }
        if(judge(x,y)==1)
        {
            maps[x][y]='D';
            DFS(step+1,k+1);
            maps[x][y]='.';
        }
        DFS(step+1,k);
    }
    
    int main()
    {
        int i;
        while(cin>>n,n)
        {
            for(i=0;i<n;i++)
    
                cin>>maps[i];
    
            ans=0;
    
            DFS(0,0);
    
            cout<<ans<<endl;
        }
        return 0;
    }
  • 相关阅读:
    用好C++的智慧
    git patch
    ORACLE 11G导入数据报ORA-12154错误解析
    graphviz
    resource for better user experiences
    reference
    xv6
    common use tools provided as website
    eclipse plugins
    Massive Online Open Course sites
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/4344620.html
Copyright © 2011-2022 走看看