[Luogu] 四子连棋
https://www.luogu.org/problemnew/show/P2346
广搜
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue> #define maxn 10010
#define inf 1000000007
#define ll long long using namespace std;
int n, m, ans = inf; int dx[] = {, , , -, };
int dy[] = {, , , , -}; struct Node {
int a[][];
int color;
int step;
} t; queue <Node> q; bool check(Node f) {
for(int i = ; i <= ; i ++) {
if(f.a[i][] == f.a[i][] && f.a[i][] == f.a[i][] && f.a[i][] == f.a[i][]) return ;
if(f.a[][i] == f.a[][i] && f.a[][i] == f.a[][i] && f.a[][i] == f.a[][i]) return ;
}
if(f.a[][] == f.a[][] && f.a[][] == f.a[][] && f.a[][] == f.a[][]) return ;
if(f.a[][] == f.a[][] && f.a[][] == f.a[][] && f.a[][] == f.a[][]) return ;
return ;
} void init() { //处理一开始的棋子颜色
t.step = ;
t.color = ;
for(int i = ; i <= ; i ++)
for(int j = ; j <= ; j ++)
if(t.a[i][j] == )
for(int k = ; k <= ; k ++) {
int x = i + dx[k];
int y = j + dy[k];
if(t.a[x][y] == ) continue ;
if(x >= && x <= && y >= && y <= ) { //注意边界
Node c = t;
c.color = t.a[x][y];
c.step = ;
swap(c.a[i][j], c.a[x][y]);//移动棋子
q.push(c);
}
}
} void bfs() { //广搜模板
while(!q.empty()) {
Node b = q.front();
q.pop();
if(check(b)) {
ans = b.step;
return ;
}
for(int i = ; i <= ; i ++)
for(int j = ; j <= ; j ++) {
if(b.a[i][j] == ) {
for(int k = ; k <= ; k ++) {
int x = i + dx[k];
int y = j + dy[k];
if(x >= && x <= && y >= && y <= && b.a[x][y] == (b.color ^ )) { //黑白交替移动
Node c = b;
swap(c.a[i][j], c.a[x][y]);//移动棋子
c.color = b.color ^ ;//如果上一步走的是黑,这一步就是白,上一步是白,这一步是黑。
c.step = b.step + ;//步数加一
q.push(c);//将当前状态入队
}
}
}
}
}
} int main() {
int x, y, z;
char s[];
for(int i = ; i <= ; i ++) {
scanf("%s",s+);
for(int j = ; j <= ; j ++) { //处理图,便于广搜
if(s[j] == 'B') t.a[i][j] = ;
if(s[j] == 'W') t.a[i][j] = ;
if(s[j] == 'O') t.a[i][j] = ;
}
}
init();
bfs();
printf("%d\n", ans);
return ;
}
[Luogu] 四子连棋的更多相关文章
- codevs1004四子连棋[BFS 哈希]
1004 四子连棋 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗 ...
- Codevs p1004 四子连棋
四子连棋 题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向 ...
- 【宽度优先搜索】神奇的状态压缩 CodeVs1004四子连棋
一.写在前面 其实这是一道大水题,而且还出在了数据最水的OJ上,所以实际上这题并没有什么难度.博主写这篇blog主要是想写下一个想法--状态压缩.状态压缩在记录.修改状态以及判重去重等方面有着极高的( ...
- codevs 1004 四子连棋
1004 四子连棋 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白 ...
- codevs 1004 四子连棋 BFS、hash判重
004 四子连棋 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋 ...
- 【洛谷 P2346】四子连棋(状态压缩,搜索)
其实这题可以直接二进制状压做,1表示黑棋,0表示白棋,另外记录下2个空点的位置就行了. 具体看代码(冗长): #include <iostream> #include <cstdio ...
- 迭代加深搜索[codevs1004 四子连棋]
迭代加深搜索 一.算法简介 迭代加深搜索是在速度上接近广度优先搜索,空间上和深度优先搜索相当的搜索方式.由于在使用过程中引入了深度优先搜索,所以也可以当作深度优先搜索的优化方案. 迭代加深搜索适用于当 ...
- codevs1004四子连棋
1004 四子连棋 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白 ...
- P2346 四子连棋
P2346 四子连棋 迭代加深++ 题意描述 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻的空格,这叫行棋 ...
随机推荐
- Python面试题集合带答案
目录 Python基础篇 1:为什么学习Python 2:通过什么途径学习Python 3:谈谈对Python和其他语言的区别 Python的优势: 4:简述解释型和编译型编程语言 5:Python的 ...
- 处理bugs心法
1. 前提 第一层:遇到异常首先必须告诉自己,冷静,不要慌.(一看到Bug就心慌,那么武功就施展不了了) 2. 入门级 第二层:遇到Bug,第一潜意识看输出异常的信息的(控制台输出,Junit输出,页 ...
- Git 常用命令 MD
| Markdown版本笔记 | 我的GitHub首页 | 我的博客 | 我的微信 | 我的邮箱 || :------------: | :------------: | :------------: ...
- 将自定义dockerfile生成的image推送到仓库中
本文为以阿里云的案例方法,其他方法未尝试 1.注册阿里云账号 2.设置密码并通过docker登录 3.创建命名空间 4.创建镜像仓库 创建仓库时,需要选择代码源的仓库储存的方式,这里我用的是gitHu ...
- restTemplate源码解析(二)restTemplate的核心逻辑
所有文章 https://www.cnblogs.com/lay2017/p/11740855.html 正文 上一篇文章中,我们构造了一个RestTemplate的Bean实例对象.本文将主要了解一 ...
- VBA if...elseif...else语句
一个If语句,后面可以跟一个或多个由布尔表达式组成的elseif语句,然后是一个默认的else语句,当所有条件变为false时执行else语句块. 语法 以下是VBScript中If...Elseif ...
- JS有关引用对象的拷贝问题
JS中有关引用对象的拷贝问题 问题描述:在开发过程中,拷贝一个对象数组给另一个数组的时候,改变新数组中对象的属性值,原数组中的对象属性值也跟着改变了. 例如新定义一个数组arr1,里面有两个对象,然后 ...
- js的页面交互
与html标签建立关系 //获取标签,js如何与html标签建立联系 两种方式 //1. let num = document.getElementsByClassName('d1'); consol ...
- sql根据一个表查询的数据作为条件查询另一个表
代码格式如下: ) 要注意的是:in后面的查询语句必须是查询一个字段跟前面的表相对应的.比如要根据订单号orderID,OpenBills 这个表就需要查询到orderID这个字段,BillConsu ...
- EBS R12.2系统logo的修改
https://blog.csdn.net/lzl1101206656/article/details/74171999 EBS系统logo的修改 转载lzl1101206656 发布于2017-07 ...