UVA 639 - Don't Get Rooked 暴力回溯

来源:互联网 发布:海信32寸智能网络电视 编辑:程序博客网 时间:2024/05/22 02:02

枚举每个可以放的位置  是放还是不放   然后判断合法的方法能放多少个   比较保存最大的一个   0.029s

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int main(){    #ifdef LOCAL    freopen("in.txt","r",stdin);    #endif // LOCAL    int T;    while(scanf("%d",&T)&&T)    {        char G[T+2][T+2];        int vis[T+2][T+2];        memset(G,0,sizeof(G));        memset(vis,0,sizeof(vis));        for(int i = 1; i <= T; i++)///存图        {            getchar();            for(int j = 1; j <= T; j++)                scanf("%c",&G[i][j]);        }        int N = 1;        for(int i = 0; i < T*T; i++)///枚举的最大次数            N *= 2;        int MAX = 0;        for(int i = 0 ;i < N; i++)        {            int t = i,f[T+2][T+2],sum = 0;///sum 计算放的个数            for(int x = 1; x <= T; x++)                for(int y = 1; y <= T; y++)                {                    if(t%2 == 1)sum++;                    f[x][y] = t%2;                    if(G[x][y] == 'X')///表示石墙                    {                        if(f[x][y] == 1)sum--;                        f[x][y] = -1;                    }                    t /= 2;                }            if(sum <= MAX)continue;            int ok = 1;            for(int x = 1; x <= T && ok; x++)///判断冲突的好像可以有更简洁的            {                for(int y = 1; y <= T && ok; y++)                {                    if(f[x][y] != 1)continue;                    for(int r = x+1; r <= T && ok; r++)///判断行是否冲突                    {                        int flag = 0;                        for(int l = x+1;l <= r; l++)///x 到r之间是否有墙隔着                            if(f[l][y] == -1)flag = 1;                        if(f[x][y] == f[r][y] && f[x][y] == 1 && !flag)                            ok = 0;                    }                    for(int c = y+1; c <= T && ok; c++)///判断列是否冲突                    {                        int flag = 0;                        for(int l = y+1; l <= c; l++)                            if(f[x][l] == -1)flag = 1;                        if(f[x][y] == f[x][c] && f[x][y] == 1 && !flag)                            ok = 0;                    }                }            }            if(ok == 1)                MAX = sum;        }        printf("%d\n",MAX);    }    return 0;}




回溯   DFS判断每个位置  每个位置有3两种方法   放或者不放  不合法的情况就退回上一层  否者继续递归下去  直到判断每一个是放还是不放
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 康佳电视打开右下角是红色的怎么办 天猫超市退款成功后收到货怎么办 天猫还没收到货就确认收货了怎么办 支付宝红包抵扣被关了怎么办 水貂绒大衣白色过色了怎么办 双面羊绒大衣袖子洗短了怎么办 特殊类型订单销量评价删除后怎么办 淘宝上卖家发货发错了地址怎么办 买完保险想换保险代理人怎么办 怀孕内裤两边磨的好疼怎么办 露肩连体裤穿着卡裆怎么办 魅族手机恋与制作人换诺基亚怎么办 蚊子叮咬后擦风油精了红肿怎么办 机动车已转让没过户出了事情怎么办 签好的合同如果甲方违约怎么办? 饭店没签合同辞职不给工资怎么办 两家为了带孩子闹翻了怎么办啊? 抵押后租赁的房屋被法院拍卖怎么办 房子买20年了没有过户怎么办 二手车没过户行驶证丢了怎么办 买的二手车行驶证丢了怎么办 在京东仓库做事把东西损坏了怎么办 微信显示该账号登陆环境异常怎么办 干洗店把衣服洗坏了怎么办 千牛上怎么改淘宝密码忘记了怎么办 公司收了代理商押金到期不退怎么办 淘宝显示签收但是我没收到货怎么办 淘宝东西没收到显示签收了怎么办 开拼多多店铺的密码忘了怎么办 拼多多密码跟店铺名忘了怎么办 闲鱼上卖出的宝贝被调包了怎么办 上传身份证照片说格式错误该怎么办 我给厂里打的款不给发货怎么办 净值接近不定期份额折算阀值怎么办 有锁电信4g掉了怎么办 在电脑中找不到想作废的发票怎么办 科目三补考费发票丢了怎么办 母婴店飞鹤奶粉突然厂家撤货怎么办 澳门买的保健品感觉是假的怎么办 淘宝买东西提交需求时卡死了怎么办 天猫精灵显示为离线状态怎么办