/*
数据范围太小 暴力暴力 Dfs直接
终止条件嘛 就是4中目标棋局 挨着枚举一遍就好了
搜索的起点一定是空格 当然 空格周围有黑有白 黑先走或者白先走答案可能不一样
所以 维护一个b 表示这一步走那种颜色 b=1先走白棋 b=2先走黑棋 */
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int xx[]={,,,,-};//枚举四个方向
int yy[]={,,-,,};
int g[][],minn=;//最小步数
char s;
void Dfs(int x,int y,int num,int b)//b表示 先走那种颜色
{
int m=,i,j,k;
if(num>=minn) return; //剪枝 如果已经比目前的最优解大了 就不用再Dfs了
for(i=;i<=;i++)//4种目标棋局一一列举 如果有符合的 更新m的值
{
if(g[i][]==g[i][]&&g[i][]==g[i][]&&g[i][]==g[i][]&&(g[i][]==||g[i][]==))m=num;
if(g[][i]==g[][i]&&g[][i]==g[][i]&&g[][i]==g[][i]&&(g[][i]==||g[][i]==))m=num;
}
if(g[][]==g[][]&&g[][]==g[][]&&g[][]==g[][]&&(g[][]==||g[][]==))m=num;
if(g[][]==g[][]&&g[][]==g[][]&&g[][]==g[][]&&(g[][]==||g[][]==))m=num;
if(m<minn)//用m更新minn
{
minn=m;
return;//不用往后Dfs了 因为后面不如现在优
}
for(i=;i<=;i++)
{
int ox=x+xx[i];
int oy=y+yy[i];
if(ox>&&ox<=&&oy>&&oy<=&&g[ox][oy]==b)
{
g[x][y]=g[ox][oy];
g[ox][oy]=;//走完之后g[ox][oy]变空 g[x][y]变g[ox][oy]
if(b==)b=;//黑白交替走 上次走黑 下次走白
else b=;
for(j=;j<=;j++)//因为空格又不止一个 所以 找空格0.0
for(k=;k<=;k++)
if(!g[j][k])//空
Dfs(j,k,num+,b);
g[ox][oy]=g[x][y];//回溯
g[x][y]=;
if(b==)b=;
else b=;
}
}
}
int main()
{
int i,j;
for(i=;i<=;i++)
for(j=;j<=;j++)
{
cin>>s;
if(s=='W')g[i][j]=;//白棋
if(s=='B')g[i][j]=;//黑棋
}
for(i=;i<=;i++)
for(j=;j<=;j++)
if(!g[i][j])//空格
{
Dfs(i,j,,);//先走白棋
Dfs(i,j,,);//先走黑棋
}
cout<<minn<<endl;
return ;
}

codevs1044四子连棋(Dfs)的更多相关文章

  1. codevs 1004 四子连棋

    1004 四子连棋  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold     题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白 ...

  2. 迭代加深搜索[codevs1004 四子连棋]

    迭代加深搜索 一.算法简介 迭代加深搜索是在速度上接近广度优先搜索,空间上和深度优先搜索相当的搜索方式.由于在使用过程中引入了深度优先搜索,所以也可以当作深度优先搜索的优化方案. 迭代加深搜索适用于当 ...

  3. codevs1004四子连棋

    1004 四子连棋  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold     题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白 ...

  4. P2346 四子连棋

    P2346 四子连棋 迭代加深++ 题意描述 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻的空格,这叫行棋 ...

  5. codevs1004四子连棋[BFS 哈希]

    1004 四子连棋   时间限制: 1 s   空间限制: 128000 KB   题目等级 : 黄金 Gold   题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗 ...

  6. Codevs p1004 四子连棋

                          四子连棋 题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向 ...

  7. 【宽度优先搜索】神奇的状态压缩 CodeVs1004四子连棋

    一.写在前面 其实这是一道大水题,而且还出在了数据最水的OJ上,所以实际上这题并没有什么难度.博主写这篇blog主要是想写下一个想法--状态压缩.状态压缩在记录.修改状态以及判重去重等方面有着极高的( ...

  8. codevs 1004 四子连棋 BFS、hash判重

    004 四子连棋 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold       题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋 ...

  9. 【洛谷 P2346】四子连棋(状态压缩,搜索)

    其实这题可以直接二进制状压做,1表示黑棋,0表示白棋,另外记录下2个空点的位置就行了. 具体看代码(冗长): #include <iostream> #include <cstdio ...

随机推荐

  1. 关于HTML编辑页面(1)

    1,<title>...</title> //省略号表示的是网页标题 2,<body>...</body>//省略号表示的是网页正文内容 3,在Drea ...

  2. Apache虚拟站点配置

    简单虚拟站点配置: <VirtualHost 127.0.0.2:80> DocumentRoot E:/wamp/www/yue ServerName 127.0.0.2:80</ ...

  3. 根据div 标签 查看数组@class=modulwrap 下面的/table/tbody/tr/td

    <div class="modulwrap"> <div class="request_title"> <span class=& ...

  4. BestCoder Round #52 (div.1)

    这周六BC和CF又差点打架,精力不够啊...结果打BC没起来,就看了一眼题跑了...今天早上补补吧,(因为今天晚上还要打UER= =) 先放官方题解: 1000 Victor and Machine ...

  5. WordPress BuddyPress Extended Friendship Request插件跨站脚本漏洞

    漏洞名称: WordPress BuddyPress Extended Friendship Request插件跨站脚本漏洞 CNNVD编号: CNNVD-201307-609 发布时间: 2013- ...

  6. WordPress /wp-admin/users.php畸形s参数路径泄漏漏洞

    漏洞版本: WordPress 2.7.x WordPress 2.8.x WordPress 2.9.x WordPress 3.0.x WordPress 3.1.x WordPress 3.2. ...

  7. LINUX怎么修改IP地址

    1,先搜索了一下,得到以下解释 IP IP地址 Netmark 子网掩码 Gateway 默认网关 HostName 主机名称 DomainName 域名 DNS DNS的IP 2,需要修改的文件常有 ...

  8. Android设备信息、感应器检测

    近日产品已经上线,开始有时间来做自己的事情,于是就开始学习和巩固一些以前用过的或者学过的技术.昨天写了一个检测Android设备的序列号和IMEI以及感应器等等的一个Demo来跟大家分享一下. 在开发 ...

  9. 图论(A*算法,K短路) :POJ 2449 Remmarguts' Date

    Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 25216   Accepted: 6882 ...

  10. Velocity常用方法

    1.字符串替换 replace#if($!{name} != '')#set($tempName = $!{name})#set($tempName = $tempName.Replace('abc' ...