zoukankan      html  css  js  c++  java
  • Fire Net ZOJ 1002

    题意:

    一个n * n 的棋盘 上面有些障碍物  放棋子 棋子不能在同一行 同一列 但可以在同一行或同一列隔着障碍物放

    这题与poj1321  的思想差不多

    对于一个位置 有两种状态放还是不放  

    参数inx  从1到n*n递增  inx/n表示x轴坐标   inx%n表示y轴坐标 

    k 为当前所用的棋子

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #define mem(a,b) memset(a,b,sizeof(a))
    using namespace std;
    const int maxn = 6, INF = 0xfffffff;
    typedef long long LL;
    char str[maxn][maxn];
    int vis[maxn][maxn];
    int n, minn;
    int check(int x,int y)
    {
        for(int i=x-1; i>=0; --i)
        {
            if(vis[i][y])
                return 0;
            if(str[i][y] == 'X')
                break;
        }
        for(int i=y-1; i>=0; --i)
        {
            if(vis[x][i])
                return 0;
            if(str[x][i] == 'X')
                break;
        }
        return 1;
    }
    
    void dfs(int inx, int k)
    {
        if(inx == n*n)
        {
            minn = max(k, minn);
            return;
        }
    
        int x = inx / n;
        int y = inx % n;
        if(str[x][y] == '.' && check(x,y))
        {
            vis[x][y] = 1;
            dfs(inx+1, k+1);
            vis[x][y] = 0;
        }
        dfs(inx+1, k);
    }
    
    int main()
    {
        while(cin>>n && n)
        {
            minn = -INF;
            mem(vis,0);
            mem(str,0);
            for(int i=0;i<n;i++)
                cin>>str[i];
            dfs(0,0);
            cout<<minn<<endl;
    
        }
        return 0;
    }
  • 相关阅读:
    c语言 数组合并
    c++ 静态函数
    c++ 多继承 公有,私有,保护
    c++ 多继承 public
    stat用法:获取文件对应权限的数字
    sublime text3 (Mac) 快捷键
    c++ 多继承
    C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
    更换主机后SSH无法登录的问题
    ssh 连接不同无线网且IP以及用户名都相同
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/9140160.html
Copyright © 2011-2022 走看看