LOJ #10029 棋盘游戏

#10029. 「一本通 1.4 练习 1」棋盘游戏 在一个4×4的棋盘上有 8 个黑棋和 8 个白棋,当且仅当两个格子有公共边,这两个格子上的棋是相邻的。移动棋子的规则是交换相邻两个棋子。给出一个初始棋盘和一个最终棋盘,请找出一个最短的移动序列使初始棋盘变为最终棋盘。 阅读详情

传送门


题目大意:有两个4×4的01方阵,在只能交换相邻的点的情况下,求从一个方阵转移到另一个所需要的最少的步数。


tag是广搜,但是深搜能过还跑得飞快。

输入时处理出两组数组,第一组是初始状态为0目标状态为1的棋子的坐标,另一组是初始状态为1目标状态为0的棋子的坐标。我们只需要把第一组的棋子移到第二组的棋子的位置就好了。

而事实上不需要去模拟棋子移动的过程,直接爆搜每个点的目的地,代价就是两个点间横纵坐标差的绝对值的和:
D i s = ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ Dis=|x_1-x_2|+|y_1-y_2| Dis=∣x1​−x2​∣+∣y1​−y2​∣

看起来和直接交换一样是不是?
规则是只能交换相邻的两个棋子,那么为什么可以直接计算呢?

假设一个0在移动。若它碰到一个1,那就与它交换,而目标位置的1会到路程中最后一个1的位置;若是碰到另一个0,就停在第二个0的位置,让第二个0替自己去跑以后的路程。

因此,只需要计算横纵坐标的差。

听某队爷说数据范围大了要用网络流做。


Code:

#include<cstdio>
#include<cstdlib>

char a[10][10],s[10];
int sx[10],sy[10],ex[10],ey[10];
int n,m,ans=0x3f3f3f3f;
bool v[10];

void dfs(int k,int dis)
{
	if(dis>ans)
		return;
	if(k>n)
	{
		ans=dis;
		return;
	}
	for(int i=1;i<=m;i++)
		if(!v[i])
		{
			v[i]=true;
			dfs(k+1,dis+abs(ex[i]-sx[k])+abs(ey[i]-sy[k]));
			v[i]=false;
		}
}

int main()
{
	for(int i=1;i<=4;i++)
		scanf("%s",a[i]+1);
	getchar();
	for(int i=1;i<=4;i++)
	{
		scanf("%s",s+1);
		for(int j=1;j<=4;j++)
		{
			if(s[j]<a[i][j])
			{
				sx[++n]=i;
				sy[n]=j;
			}
			if(s[j]>a[i][j])
			{
				ex[++m]=i;
				ey[m]=j;
			}
		}
	}
	dfs(1,0);
	printf("%d",ans);
}
【雅礼集训2017】Day2 棋盘游戏 【雅礼集训2017】Day2 棋盘游戏题面: Alice 和 Bob 在玩一个游戏,给出一张 n×mn \times m 的棋盘,上面有一些点是障碍,游戏的开始,Alice 选定棋盘上任意一个不是障碍的格子,并且将一枚棋子放在其中,然后 Bob 先手,两人轮流操作棋子,每次操作必须将棋子从当前位置移动到一个相邻的无障碍且未经过的格子(即每个格子不允许经过两次),不能操作的人输,如果两人都按照最优策略 阅读详情

相关推荐

AutoCAD2016安装破解教程

AutoCAD2016安装破解教程。本人亲自实验,破解成功,有效。以64位为例。 工具/原料   笔记本电脑 AutoCAD2016安装包 AutoCAD2016注册机(xf-adsk2016_x64.exe)链接:http://pan.baidu.com/s/1cAZQA windows7/8/8.1/10-32...

weixin_33804990的博客 1万+

LOJ #6440. 万能欧几里得

链接: link 题解: 考虑处理 AxBAxB\frac{Ax}{B} ,作射线 y=ABxy=ABxy = \frac{A}{B}x ,从原点出发,碰到 y=cy=cy = c 记一个 111 ,碰到 x=cx=cx = c 记一个 000 ,然后要处理出每个 000 之前的 111 的个数。 当 A&lt;BA&lt;BA < B 的时候,将 010101 互换变成 101010...

wxh010910 1557

基于深度学习的UWB门禁检测

针对基于UWB技术智能门禁管理系统,由于测距误差或非视距原因导致门禁产生不合理动作的现象。分析如何采用基于深度学习的方法,通过对TWR测距数据、TWR监听数据、到达角度差(PDOA)、信道脉冲响应(CIR)等数据维度进行深度学习,利用 TensorFlow建立相应的推导模型,对卡片姿态进行更加精准可靠的检测,从而更好完成闸机开合控制。

tenth_quadrant的博客 2026

loj题目总览

——DavidJing提供技术支持 现将今年7月份之前必须刷完的题目列举 完成度[25/34] [195/250] 第 1 章 贪心算法 √ [11/11] #10000 「一本通 1.1 例 1」活动安排 #10001 「一本通 1.1 例 2」种树 #10002 「一本通 1.1 例 3」喷水装置 #10003 「一本通 1.1 例 4」加工生产调度 #10004 「一本通 1.1 ...

djrlb735733的博客 923

✨使用 vLLM + Docker 部署 Qwen3-Embedding-8B 并实现高效文本向量生成(附 `curl` 测试)

本文介绍了如何使用 vLLM 和 Docker 部署 Qwen3-Embedding-8B 嵌入模型服务,并通过标准 OpenAI 兼容接口进行调用和结果解析。如果你在部署中遇到任何问题,欢迎留言讨论!

用大模型重构生活:猫奴程序员的AI智能日常记录 6238

python 常见算法(1-50题)

常见的算法题

weixin_58470558的博客 1756

【LOJ6033】棋盘游戏【二分图博弈】

传送门 显然是个二分图,设开始位置是左边,另一边是右边 那么先手是把左边挪到右边,后手是把右边挪到左边,不能挪的那方失败 结论:Alice必胜当且仅当开始位置不一定在最大匹配上 必要性: 如果开始位置不在最大匹配上,那一定有种匹配方案不包含开始位置(废话) 考虑这种方案,由于左边已经空出来了,所以右边和它连通的点都已经有匹配。 这样Bob移动到哪里,Alice就移到它的匹配点,这样Alice必胜。...

Lstdo的博客 508

Android音频子系统分析-car_audio_configuration.xml

先附上一个例子,再逐一解释。概括来说,该文件描述了车里有哪些区域,每个区域划分了多少组,每个组包含了哪些设备,每个设备接收哪些类型的音频流。

不定时记录分享一些有用没用的东西 989

[loj2731]「JOISC 2016 Day 1」棋盘游戏

题目大意 有一个3 × n的棋盘,你在上面玩游戏。开始时,棋盘有一些格子上已经摆上了棋子,剩下的格子都是空的。每次你可以选择一个空的格子摆上棋子,这个格子必须满足以下两个条件之一: 这个格子上下两格都有棋子; 这个格子左右两格都有棋子。 你想知道有多少种不同的摆满棋盘的摆放顺序。 思路 首先判断无解,如果四个角没有棋子或者一三行出现了连续两个空格子,那么就无解. 然后发现整个图变成了这个样子:...

ylsoi的博客 948

openclaw通俗入门系列9——流式传输 + 分块

流式传输 = 不等写完就开始发。分块流式传输是把长回复切成几条消息发(所有渠道),草稿流式传输是像打字一样实时显示(仅 Telegram)。可以配置块大小、发送时机、合并规则、类人延迟。

m0_60605453的博客 506

Android P车机添加屏幕多指全局自定义手势操作

参照原生状态栏全局下拉手势拦截,实现屏幕全局多指手势响应操作,并对手势进行转换为KeyEvent,以便项目自定义手势行为或应用拦截手势行为。

shusuanly的博客 1251

「一本通 1.4 练习 1」棋盘游戏

题目描述 在一个4 x 4的棋盘上有 8个黑棋和 8个白棋,当且仅当两个格子有公共边,这两个格子上的棋是相邻的。移动棋子的规则是交换相邻两个棋子。 给出一个初始棋盘和一个最终棋盘,请找出一个最短的移动序列使初始棋盘变为最终棋盘。 输入格式 前四行,每行4个数字( 1或者0 ),描述了初始棋盘;接着是一个空行;第六到第九行,每行 4个数字( 1或者0),描述了最终棋盘。 输出格式 输出文件的第一行是一个整数n,表示最少的移动步数。 样例 样例输入 1111 0000 1110 0010 1010 0101 1

Piink的博客 1249

51单片机+L298驱动步进电机+L297测速+LCD1602显示+按键调试+Proteus仿真

51单片机+L298驱动步进电机+L297测速+LCD1602显示+按键调试+Proteus仿真 *Proteus仿真 L298N是双H桥式驱动器。 L297是步进电机控制集成芯片(包括环形分配器),可产生四相驱动信号,应用于微处理机控制两相双极性和四相单极性步进电机。电动机可由半阶梯、正常和斩波驱动模式驱动,同时设于晶片内的PWM斩波线路容许以开关形式控制线路的电流。此器件只需要时钟、方向和模式输入信号。相位是由内部产生的,因此可减轻微处理机和程序设计的负担。 实例代码 /************

perseverance51博客 4584

LOJ6356 四色灯 容斥 dp

题目链接 题意: 你有nnn个灯,每个灯有四种可能的颜色,一开始都是第一种颜色,有mmm种操作,每种操作是一个xix_ixi​,表示把xix_ixi​的倍数全都变成下一个颜色,第四次变化后会变回第一次的颜色,问你从这mmm种操作中随机选出一个集合的操作去进行,期望有多少个颜色为初始的第一种颜色的灯。n&amp;lt;=1e9,m&amp;lt;=20n&amp;lt;=1e9,m&amp;lt;=...

forever_shi的博客 396

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【51nod1327】棋盘游戏

题意 n×m的棋盘,放棋子,要求第i行左边lil_ili​个格子和右边rir_iri​个格子各恰好有一个棋子,且每一列最多只能有1个棋子,问方案数,对109+710^9+7109+7取模 n≤50,m≤200n\leq50,m\leq200n≤50,m≤200 Solution 这是一道DP好题。 太菜了以至于我想了半天连状态都没想到。 考虑到每一列最多放一个,那么考虑在列上做文章,设f[i][]...

white_elephant的博客 701

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

#10166. 「一本通 5.3 练习 1」数字游戏

【题目描述】 由于科协里最近真的很流行数字游戏,某人又命名了一种取模数,这种数字必须满足各位数字之和 modN 为 0。现在大家又要玩游戏了,指定一个整数闭区间 [a,b],问这个区间内有多少个取模数。 【输入格式】 题目有多组测试数据。每组只含三个数字 a,b,N。 【输出格式】 对于每个测试数据输出一行,表示各位数字和 modN 为 0 的数的个数。 【样例输入】 1 19 9...

TJ 969

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

#10029. 「一本通 1.4 练习 1」棋盘游戏(深搜) #10031. 「一本通 1.4 练习 3」移动玩具

LINK 分析:搜索对象为两种变化的点,且他们的数量相等,不断模拟变化的过程,求出最小距离和。 AC代码: #include<stdio.h> #include<math.h> #include<string.h> char a[100][100],b[100]; int qx[100],qy[100],qqx[100],qqy[100]; int sum,k,kk,ans=0x3f3f3f3f; int book[100]; void dfs(int x,int

大聪明的博客 405

类欧几里得算法学习笔记

类欧, 万欧

curry的博客 731

LOJ 6278

#include&lt;cstdio&gt;#include&lt;cmath&gt;#include&lt;vector&gt;#include&lt;algorithm&gt;#define ll long longusing namespace std;int n,blo,bl[50005];ll a[50005],atag[505];vector&lt;int&gt;ve[505];voi...

TwistFate24的博客 468

LOJ 6432 「PKUSC2018」真实排名——水题

题目:https://loj.ac/problem/6432 如果不选自己,设自己的值是 x ,需要让 “ a<x && 2*a>=x ” 的非 x 的值不被选;如果选自己,需要让 “ a>=x && 2*a<x ” 的非 x 的值被选。 注意是 “非 x ” 的值。 #include<cstdio> #include...

weixin_34138521的博客 176

LOJ 一本通一句话题解系列:

第一部分 基础算法 第 1 章 贪心算法 1):「一本通 1.1 例 1」活动安排:按照结束时间排序,然后扫一遍就可以了。 2):「一本通 1.1 例 2」种树:首先要尽量的往区间重叠的部分种树,先按照右端点排序,每次贪心的从区间的最右边种,然后检查下一个区间是否缺少,缺的话就在最右边继续补。 3):「一本通 1.1 例 3」喷水装置:这题可以发现每个装置所能覆盖的区间是一个矩形,所以这题就变成了...

weixin_30663471的博客 956

一本通 1.4 例3 Knight Moves(广搜)

  题目链接:https://loj.ac/problem/10028        好久没写搜索题了,找一道练练手,这道题描述可能稍微有点问题,说是n*n的地图,然后发现样例中地图大小包括了0 0点和n n点,其他就没什么了,裸的广搜,主要就是构建dir数组。 AC代码: #include &lt;iostream&gt; #include &lt;cstdio&gt; #includ...

Charles_Zaqdt的博客 923

【LOJ】#2731. 「JOISC 2016 Day 1」棋盘游戏-DP

DP

远行客 480

HYSBZ 4016 最短路径树问题

Description 给一个包含n个点,m条边的无向连通图。从顶点1出发,往其余所有点分别走一次并返回。 往某一个点走时,选择总长度最短的路径走。若有多条长度最短的路径,则选择经过的顶点序列字典序最小的那条路径(如路径A为1,32,11,路径B为1,3,2,11,路径B字典序较小。注意是序列的字典序的最小,而非路径中节点编号相连的字符串字典序最小)。到达该点后按原路返回,然后往其他点

Occult 1037

LOJ #10166. 数字游戏【数位DP】

记忆化搜索就很直观了: #include &lt;cmath&gt; #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; #define ll long long #define rep(i,x,y) for(ll i=(x);i&lt;=(y);...

Yucohny 610
上一篇: NOIP2018游记
下一篇: POJ 3764 The xor-longest Path
Dawn_LLLLLLL
博客等级 码龄9年 12粉丝 59原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值