CODEVS——T 1004 四子连棋
在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻的空格,这叫行棋一步,黑白双方交替走棋,任意一方可以先走,如果某个时刻使得任意一种颜色的棋子形成四个一线(包括斜线),这样的状态为目标棋局。
| ● | ○ | ● | |
| ○ | ● | ○ | ● |
| ● | ○ | ● | ○ |
| ○ | ● | ○ |
从文件中读入一个4*4的初始棋局,黑棋子用B表示,白棋子用W表示,空格地带用O表示。
用最少的步数移动到目标棋局的步数。
BWBO
WBWB
BWBW
WBWO
5
hi
迭代加深、用空白格与该移动的格子交换
#include <cstdio> char map[][];
int ans,x1,x2,y1,y2;
int fx[]={,,,-};
int fy[]={,,-,}; #define swap(a,b) {char tmp=a;a=b;b=tmp;} bool judge()
{
for(int i=; i<; i++)
{
if(map[i][]==map[i][]&&map[i][]==map[i][]&&map[i][]==map[i][]) return ;
if(map[][i]==map[][i]&&map[][i]==map[][i]&&map[][i]==map[][i]) return ;
}
if(map[][]==map[][]&&map[][]==map[][]&&map[][]==map[][]) return ;
if(map[][]==map[][]&&map[][]==map[][]&&map[][]==map[][]) return ;
return false;
}
bool DFS(int nx1,int ny1,int nx2,int ny2,char pre,int step)
{
if(step>=ans) return judge();
int tx1,tx2,ty1,ty2;
for(int i=; i<; ++i)
{
tx1=nx1+fx[i],ty1=ny1+fy[i];
tx2=nx2+fx[i],ty2=ny2+fy[i];
if(tx1>&&tx1<&&ty1>&&ty1<&&map[tx1][ty1]!=pre)
{
swap(map[nx1][ny1],map[tx1][ty1]);
if(DFS(tx1,ty1,nx2,ny2,(pre=='W'?'B':'W'),step+)) return ;
swap(map[nx1][ny1],map[tx1][ty1]);
}
if(tx2>&&tx2<&&ty2>&&ty2<&&map[tx2][ty2]!=pre)
{
swap(map[nx2][ny2],map[tx2][ty2]);
if(DFS(nx1,ny1,tx2,ty2,(pre=='W'?'B':'W'),step+)) return ;
swap(map[nx2][ny2],map[tx2][ty2]);
}
}
return ;
} int AC()
{
for(int i=; i<; ++i)
{
scanf("%s",map[i]+);
for(int j=; j<; ++j)
if(map[i][j]=='O')
if(!x1) x1=i,y1=j;
else x2=i,y2=j;
}
for(ans=; ans<1e7; ++ans)
{
if(DFS(x1,y1,x2,y2,'W',)) break;
if(DFS(x1,y1,x2,y2,'B',)) break;
}
printf("%d\n",ans);
return ;
} int Aptal=AC();
int main(){;}
CODEVS——T 1004 四子连棋的更多相关文章
- 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颗白色棋 ...
- CODEVS 1004四子连棋
[题目描述 Description] 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻的空格,这叫行棋一步,黑 ...
- BFS搜索算法应用_Codevs 1004 四子连棋
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <algorithm> #include <cs ...
- 【wikioi】1004 四子连棋
题目链接 算法:BFS //2014-02-05更新 *******************************2013-10-15******************************* ...
- 【宽度优先搜索】神奇的状态压缩 CodeVs1004四子连棋
一.写在前面 其实这是一道大水题,而且还出在了数据最水的OJ上,所以实际上这题并没有什么难度.博主写这篇blog主要是想写下一个想法--状态压缩.状态压缩在记录.修改状态以及判重去重等方面有着极高的( ...
- 迭代加深搜索[codevs1004 四子连棋]
迭代加深搜索 一.算法简介 迭代加深搜索是在速度上接近广度优先搜索,空间上和深度优先搜索相当的搜索方式.由于在使用过程中引入了深度优先搜索,所以也可以当作深度优先搜索的优化方案. 迭代加深搜索适用于当 ...
- codevs1004四子连棋[BFS 哈希]
1004 四子连棋 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗 ...
- codevs1004四子连棋
1004 四子连棋 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白 ...
随机推荐
- B3109 [cqoi2013]新数独 搜索dfs
就是基于普通数独上的一点变形,然后就没什么了,普通数独就是进行一边dfs就行了. 题干: 题目描述 输入格式 输入一共15行,包含一个新数独的实例.第奇数行包含左右方向的符号(<和>),第 ...
- [python 基础]python装饰器(一)添加functools获取原函数信息以及functools.partial分析
python装饰器学习的时候有两点需要注意一下 1,被装饰器装饰的函数取其func.__name__和func.func_doc的时候得到的不是被修饰函数的相关信息而是装饰器wrapper函数的doc ...
- iOS地图集成示例:百度地图POI检索
一.集成百度地图(傻瓜教程,以网站说明文档为准,此处罗列几项主要步骤) 1.登录 http://lbsyun.baidu.com 百度地图开发者平台,获取SDK和集成文档. 2.百度地图可以提供的 ...
- 93.EXTJS Form之VTypes
转自:http://blog.sina.com.cn/s/blog_7778950d0100y2pg.html 本文我们主要探讨一下EXTJS的Form中验证的问题,可能用过EXTJS的Form的人都 ...
- leetcode树相关
目录 144前序遍历 94中序遍历(98验证二叉搜索树.230二叉搜索树中第K小的元素) 145后序遍历 102/107层次遍历(104二叉树最大深度.103 105从前序与中序遍历序列构造二叉树 1 ...
- Coursera Algorithms week1 查并集 练习测验:1 Social network connectivity
题目原文描述: Given a social network containing. n members and a log file containing m timestamps at which ...
- POJ 1011 / UVA 307 Sticks
中文题 (一般都比较坑) 思路:DFS (感谢学长的幻灯片) 这破题把我折腾惨了!!!搞了n天 // by Sirius_Ren #include <cstdio> #include &l ...
- Visual Studio切换界面显示语言
[工具]-[选项]-[环境]-[区域设置]-[语言]-[获取其他语言] 安装后重启即可.
- SQL学习--Select(一)TOP、派生表、连接、谓词
TOP关键字 WITH TIES t.title,sum(s.qty)as totalSales from sales s left join titles t on s.title_id=t.tit ...
- bootstrap 图片 图标
一.图片 1.响应式图片:<img src=" " class="responsive"> 2.圆角图片:<img src=" ...