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

    #include "stdio.h"
    int map[5][5],max,n;//map输入的地图,max最大碉堡数,n地图大小
    bool set(int x,int y)//判断是否可以放置碉堡,只考虑当前空格左上角的情况
    {
        int i;
        for(i=x-1; i>=0; i--)
        {
            if(map[i][y]=='X') break;//有墙,此行可以放置
            if(map[i][y]=='!') return 0;//有碉堡,返回
        }
        for(i=y-1; i>=0; i--)
        {
            if(map[x][i]=='X') break;//有墙,此列可以放置
            if(map[x][i]=='!') return 0;//有碉堡,返回
        }
        return 1;//可以放置
    }
    void find(int k,int cnt)//dfs函数,k当前格子数,cnt当前碉堡数
    {
        int x,y;
        if(k==n*n)//结束条件
        {
            if(cnt>max) max=cnt;
            return;
        }
        else
        {
        x=k/n;//行号
        y=k%n;//列号
        if(set(x,y)&&map[x][y]=='.')//当前格子可以放
        {
            map[x][y]='!';//标记放置的碉堡
            find(k+1,cnt+1);//寻找下一个
            map[x][y]='.';//恢复现场
        }
        //当前格子不可以放或着不放(既这里加else会错),搜索下一个
        find(k+1,cnt);
    }
    }
    int main()
    {
        int i,j;
        while(~scanf("%d",&n))
        {
            if(n==0) break;
            getchar();//读入回车
            for(i=0; i<n; i++)
            {
                for(j=0; j<n; j++)
                    scanf("%c",&map[i][j]);
                getchar();
            }
            max=0;//标记清零
            find(0,0);
            printf("%d
    ",max);
        }
        return 0;
    }


    版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/

  • 相关阅读:
    哈工大《机器学习》最小二乘法曲线拟合——实验一
    最小二乘法曲线拟合以及matlab实现
    Dubbo简介
    Redis持久化策略
    Linux安装Redis
    RabbitMQ-Demo
    RabbitMQ安装相关
    SpringCloud-Alibaba-Nacos-Demo
    Nacos_启动失败原因
    IDEA中properties中文显示乱码
  • 原文地址:https://www.cnblogs.com/xryz/p/4848119.html
Copyright © 2011-2022 走看看