zoukankan      html  css  js  c++  java
  • Fire Net hdu1045(DFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=1045

    题意:现在让你在为'.'的位置上放置大炮。

    要求:1.同行同列只能有一个大炮;2.若是在同行(同列)有'X',可以将两个大炮隔开的话,那么可以允许同行(同列)有两个(及其以上)大炮出现

     

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <map>
    #include <queue>
    #include <stack>
    #include <math.h>
    
    using namespace std;
    
    #define INF 0x3f3f3f3f
    const int maxn = 10;
    
    typedef long long LL;
    char maps[maxn][maxn];
    int n, ans;
    
    int Judge(int row, int col)
    {
        ///判断左边
        for(int i=col; i>=0; i--)
        {
            if(maps[row][i]=='X')
                break;
            if(maps[row][i]=='@')
                return 0;
        }
    
        ///判断上边
        for(int i=row; i>=0; i--)
        {
            if(maps[i][col]=='X')
                break;
            if(maps[i][col]=='@')
                return 0;
        }
    
        return 1;
    }
    
    
    void DFS(int t, int cnt)///t记录当前点,cnt记录当前可以放置大炮的个数
    {
        if(t==n*n)
        {
           ans = max(ans, cnt);///ans存最大的放置大炮的个数
            return ;
        }
    
        int row=t/n;///
        int col=t%n;///
    
        if(maps[row][col]=='.' && Judge(row, col))///改点可以放置大炮
        {
            maps[row][col]='@';///将该点置为大炮
            DFS(t+1, cnt+1);
            maps[row][col]='.';///记得回溯时要将位置换回来
        }
    
            DFS(t+1, cnt);///若不满足放置大炮的要求,则遍历下一点
    }
    int main()
    {
    
        while(scanf("%d", &n), n)
        {
            for(int i=0; i<n; i++)
              scanf("%s", maps[i]);
    
              ans = 0;
              DFS(0, 0);
    
              printf("%d
    ", ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    windows 10 查看电池损耗情况
    pycharm 远程显示 matplotlib
    关联矩阵与邻接矩阵 2018-11-27
    Determinats(行列式) 2018-11-23
    Ablation study 2018-11-10
    ODBC,实现图片循环写入Oracle数据库
    c#与java之比较(转自Jack.Wang's home)
    java中移位操作
    如何自学java迅速成为java高手
    一点点学习思考
  • 原文地址:https://www.cnblogs.com/daydayupacm/p/5772843.html
Copyright © 2011-2022 走看看