【搜索】下棋

LLM下棋原理:模式压缩与元认知如何替代暴力搜索 国际象棋AI传统依赖蒙特卡洛树搜索与评估函数,而大语言模型(LLM)通过文本训练内化规则、压缩棋局模式、执行自我反思式纠错,形成独特的非计算型棋力。其核心不在于每秒搜索节点数,而在于从海量PGN对局和棋评中提炼语义规律,实现对中等水平人类棋手的战术压制与战略稳定性优势。这种基于语言理解的推理范式,使LLM在快棋、复盘辅助、错误诊断等场景具备高实用价值,尤其适合Elo 1200–2000阶段棋手提升模式识别与元认知能力。本文深入剖析LLM的规则内化、模式压缩与元认知纠错三大支柱,揭示其赢棋逻辑与真实边界。 阅读详情

下棋

Time Limit: 6000/3000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)

Problem Description

N∗M的棋盘上有一个受伤的国王与一个要去救援国王的骑士,他们每个单位时间必须同时移动一次寻找对方。
如下图所示,黑色的图例表示国王(右)或骑士(左)当前所在的位置,那么灰色的位置表示在一次移动中他们可能到达的位置。国王伤势严重,因此他必须在K个单位时间内得到骑士的救援,否则会挂掉。
问国王是否可以在K个单位时间内获得救援,如果可以,最短需要花多少个单位时间。

Input

第一行包含一个整数T,(1≤T≤50)代表测试数据的组数,接下来T组测试数据。
每组测试数据第一行包含三个整数N,M,K, 且2≤N,M≤1000, 1≤K≤200。
第二行两个整数Xking,Yking,对应国王所在方格的坐标。
第三行两个整数Xknight,Yknight,对应骑士所在方格的坐标。其中1≤Xking,Xknight≤N,1≤Yking,Yknight≤M,保证骑士与国王一开始不在同一个方格内且他们都可以移动。

Output

对于每组测试数据,输出两行:
第一行输出:”Case #i:”。i代表第i组测试数据。
第二行输出测试数据的结果,如果国王可以得到救援,则输出最快需要花多少个单位时间。否则,输出“OH,NO!”。

Sample Input

2
3 2 1
1 1
3 1
3 3 1
1 1
1 2 

Sample Output

Case #1:
1
Case #2:
OH,NO!

题解:

可以对国王和骑士各自进行一遍bfs,扫出到达每个点的最小时间,然后枚举每一个点,进行如下讨论:
1> 骑士到达时间 == 国王到达时间,ans = min(ans,时间);
2> 骑士到达时间 < 国王到达时间,我们知道,骑士走一步,它的坐标的加和的奇偶性一定会发生改变(±3),而国王走一步,它的奇偶性可变也可不变。
所以此时我们需要判断他们的奇偶性,如果一样,ans = min(ans,国王时间),如果不一样,ans = min(ans,国王时间 + 1)。
3> 骑士到达时间 > 国王到达时间,此时如果骑士到达的时间 > 1,则ans = min(ans,国王时间)。

Code:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#define N 1100
using namespace std;
int T,n,m,k,ans,qx[2*N*N],qy[2*N*N],f[2][N][N];
int X[2][10] = {{-1,-2,-1,-2,1,2,1,2},{-1,-1,-1,1,1,1,0,0}};
int Y[2][10] = {{-2,-1,2,1,-2,-1,2,1},{-1,0,1,-1,0,1,-1,1}};
int in(){
    int x = 0; char ch = getchar();
    while (ch < '0' || ch > '9') ch = getchar();
    while (ch >= '0' && ch <= '9')
        x = x * 10 + ch - '0',ch = getchar();
    return x;
}
void bfs(int x,int y,int p){
    int h=0,t=1; qx[h] = x,qy[h] = y;
    f[p][x][y]=0;
    while (h < t){
        int xx = qx[h],yy = qy[h];
        if (f[p][xx][yy] >= k) break;
        for (int i = 0; i < 8; i++){
            int xxx=xx + X[p][i],yyy=yy + Y[p][i];
            if (xxx >=1 && xxx <=n && yyy >=1 && yyy <=m && f[p][xxx][yyy]>1000000){
                qx[t] = xxx,qy[t] = yyy;
                f[p][qx[t]][qy[t]]=f[p][qx[h]][qy[h]]+1;
                t++;
            }
        }
        h++;
    }
}
void work(){
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++){
            if (f[0][i][j] > k || f[1][i][j] > k) continue;
            if (f[0][i][j] == f[1][i][j]) ans = min(ans,f[0][i][j]);
            else if (f[0][i][j] <= f[1][i][j]) ans = min(ans,f[1][i][j] + ((f[0][i][j]&1)^(f[1][i][j]&1)));
            else if (f[0][i][j] > 1) ans = min(ans,f[0][i][j]);
        }
}
int main(){
    T = in();
    for (int _ = 1; _ <= T; _++){
        n = in(),m = in(),k = in();
        int wx = in(),wy = in(),mx = in(), my = in();
        memset(f,0x7f,sizeof(f));
        bfs(mx,my,0); bfs(wx,wy,1);
        ans = 0x7fffffff; work();
        printf("Case #%d:\n",_);
        if (ans > k) printf("OH,NO!\n");
        else printf("%d\n",ans);
    }
    return 0;
}
我让AI自己跟自己下棋:AlphaZero核心思想与蒙特卡洛树搜索的‘进化’之路 本文深入解析AlphaZero如何通过蒙特卡洛树搜索(MCTS)与深度神经网络的协同进化,实现从零开始的自我博弈学习。从搜索算法的突破到神经网络的赋能,揭示了AlphaZero在棋类AI中的革命性创新,并提供了Python实现的简化框架,展示其在中国象棋等复杂游戏中的应用潜力。 阅读详情

相关推荐

AlphaZero的“灵魂”是MCTS?深入拆解蒙特卡洛树搜索如何让AI学会下棋

本文深入解析了AlphaZero如何通过蒙特卡洛树搜索(MCTS)与深度学习的结合,实现超越人类水平的棋类AI。文章详细拆解了MCTS在AlphaZero中的四大关键阶段,以及神经网络如何增强搜索效率,特别以中国象棋为例展示了这一技术的实际应用与实现方法。

weixin_28686915的博客 229

CDOJ 1071 秋实大哥下棋

秋实大哥下棋 limit 1s 65535KB 胜负胸中料已明,又从堂上出奇兵。秋实大哥是一个下棋好手,独孤求败的他觉得下棋已经无法满足他了,他开始研究一种新的玩法。 在一个n×m的棋盘上,放置了k个车,并且他在棋盘上标出了q个矩形,表示矩形内部是战略要地。秋实大哥要求一个矩形内的每一个格子,都至少能被一辆在矩形内的车攻击到,那么这个矩形就是被完整保护的。 现在秋实大哥想知道每一个矩形

zwsign的博客 492

蓝桥杯 (在矩阵中摆放最多的马相互不攻击)

蒜头君喜欢下棋。最近它迷上了国际象棋。国际象棋的棋盘可以被当做一个 8\times 88×8 的矩阵,棋子被放在格子里面(不是和中国象棋一样放在线上)。蒜头君特别喜欢国际象棋里面的马,马的移动规则是这样的:横着走两步之后竖着走一步,或者横着走一步之后竖着走两步。例如,一匹马在 (3,3)(3,3) 的位置,则它可以到达的地方有 (1,2)(1,2),(2,1)(2,1),(1,4)(1,4),(4...

. 6622

模仿并超越人类围棋手,KL正则化搜索让AI下棋更像人类,Meta&CMU出品

点击上方“视学算法”,选择加"星标"或“置顶”重磅干货,第一时间送达晓查 发自 凹非寺量子位 报道 | 公众号 QbitAI如果非要问AlphaGo有什么缺点,那就是下棋不像人类。和Alp...

zandaoguang的博客 196

ABB RobotWare数据包全版本归档与高效获取指南

记得去年有个汽车产线升级项目,客户现场用的是RobotWare 6.05.0166版本,而我的RobotStudio里只有最新的7.x系列。RobotWare数据包本质上就是ABB机器人的"操作系统镜像",不同版本的机器人控制器需要匹配特定版本的RobotWare。有个容易忽略的细节:偶数版本号(如6.04、6.06)通常比奇数版本更稳定,因为ABB的内部发布策略是偶数版用于正式产线,奇数版多用于测试新功能。最终实现了零停机升级,这个经验告诉我们:版本切换不是简单的覆盖安装,而是需要系统性的验证流程。

weixin_30764883的博客 278

OpenFOAM-多孔介质模型(porous media)

文章目录一、多孔介质(porous media)二、使用步骤1.达西定律2.Darcy-Forchheimer3.OpenFOAM fvOptions4.paraview动画每帧显示时间(Annotate Time)5.参考内容总结 一、多孔介质(porous media) 在流体力学中,流体流经多孔介质是指流体流经多孔介质时的行为方式,如海绵或木材,或使用沙子或其他多孔材料过滤水。 我们将展示如何设置多孔层,并使用OpenFOAM模拟流体通过该介质。 二、使用步骤 1.达西定律 达西定律最初是由达西通.

zq93538196的博客 9938

[位运算+搜索]下棋

[题目描述] 【问题描述】   学习之余,小秋秋还喜欢进行棋类活动。。。 现在,小秋秋迷上了一个叫tic-tac-toe的游戏。。(这种诡异的名字?原题如此)。 这个游戏是两个人轮流在4*4的格子中放棋子,一个人放满了一行或一列或一个对角线就算赢。 现在,小秋秋用X先手,已经下过许多步了。他想知道自己现在是否有必胜策略,以及最小的字典序走法。   【输入文件】   输入有多

qw 924

【Tableau】解决订阅报表PDF中文显示为乱码(方框)问题

一、问题描述 在tableau server网页端报表中文字符能正常显示,但在订阅后发送到邮箱时,以图片格式呈现的内容中中文字符显示为方框。 网页端报表能正常显示中文字符: 邮件中的报表不能正常显示中文字符: 二、问题分析 网页端字符显示情况是由html编码决定的,而tableau生成图片时是通过所部署的服务器的字体文件显示字体。因此可能是由于Linux服务器缺失相关的字体文件导致网页端选择的中文字体在服务器上缺失对应的字体文件导致的。则考虑在服务器引入对应的字体文件。 三、问题解决 1、查看服务器现有

why_not_study的博客 2833

蒙特卡洛树搜索:下棋小朋友的智慧秘诀

蒙特卡洛树搜索(MCTS)是一种通过模拟和统计来优化决策的算法,特别适用于复杂的博弈场景。其核心思想是通过多次随机模拟来评估每一步的潜在胜率,从而选择最优策略。MCTS分为四个步骤:选择(沿着最有希望的分支前进)、扩展(记录新局面)、模拟(随机下棋至终局)、回传(更新节点统计)。以井字棋为例,AI通过反复模拟不同落子点的结果,最终选择胜率最高的走法。MCTS广泛应用于围棋、国际象棋、游戏AI和机器人决策等领域,其优点在于无需穷举所有可能,且能自适应地提高准确性,但模拟次数不足时可能影响结果。MCTS就像一个

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 909

STM32F103串口接收中断:USART_IT_IDLE和USART_IT_RXNE区别

2:如果是大于1个byte的数据,在不用DMA的情况下,同时使能USART_IT_RXNE,USART_IT_IDLE中断,每收到一个字节在中断中把数据存到缓存中,待收到USART_IT_IDLE中断时,收完整帧数据,然后再解析处理数据。比如:如上图在初始化时,同时开启了两个中断,如果传送8个字节的数据,就会产生8个USART_IT_RXNE,和1个USART_IT_IDLE中断。(如果接收到数据,在1个byte的时间内,没有收到新数据,就认为是数据传送完成,产生空闲USART_IT_IDLE中断)

weixin_66299220的博客 2401

局部路径规划算法 - B样条曲线(B-spline Curves)

本文详解了B样条以及代码实现

BigDavid123的博客 6506

下棋(dfs搜索)(应该也叫递归)

给出一个棋盘,任意两个棋子不能放在同一行或者同一列,问共有多少种方法。第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n

weixin_73874239的博客 171

吃透工业通信:C#工控机实现Modbus、OPC UA、Profinet、EtherCAT协议全适配

本文介绍了基于C#的工业通信协议全适配方案,采用分层架构设计实现Modbus、OPC UA、Profinet和EtherCAT四种主流协议的统一管理。核心包括:1)三层架构(应用层、抽象层、协议层)降低耦合;2)定义统一通信接口IIndustrialCommunication;3)工厂模式创建不同协议实例;4)以Modbus TCP为例展示具体实现。该方案经过实际项目验证,可简化多协议设备管理,提升工业自动化系统的开发效率。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 722

POJ 1321 棋盘问题 (DFS)

链接 : Here! 思路 : 这道题类似 $N$ 皇后, 只不过每一行并不是必须有一个棋子, 所以仍然是枚举每一行 $x$ , 1. 对于下棋的策略来说, 枚举每一列, 检查下棋点是否合法, 如果合法则搜索下一行, 并且标记, 等到搜索下一行的所有状态搜索完成, 取消标记, 进行回溯. 2. 对于不下棋的策略, 直接搜索下一行即可. /*********************...

dijingzhou4259的博客 148

OpenOCD入门到精通:第 1 章 OpenOCD 概述

OpenOCD是一款开源的片上调试工具,支持60+调试适配器和8大处理器架构。它提供三大核心功能:片上调试、在系统编程和边界扫描测试。作为嵌入式开发工具链的中间桥梁,OpenOCD连接上层IDE/GDB与底层硬件,采用分层架构设计实现硬件兼容性。其配置基于Tcl脚本语言,支持网络服务接口,广泛应用于ARM、RISC-V等芯片的调试与烧录场景。

从事嵌入式linux android驱动开发,拥有全栈能力 1401

SIWAVE仿真PCB操作说明

使用SIWAVE进行PCB仿真提取S参数的操作

sinat_15150363的博客 3067

我让AI自己跟自己下棋:蒙特卡洛树搜索(MCTS)如何成为AlphaZero的‘大脑’?

本文深入探讨了蒙特卡洛树搜索(MCTS)如何作为AlphaZero的核心算法,使其通过自我对弈在棋类游戏中实现超人类水平。文章详细解析了MCTS的四步流程与神经网络协同工作原理,并特别以中国象棋为例,展示了Python实现中的关键技术细节与优化策略。

weixin_30908941的博客 210

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

从下棋到导航:聊聊启发式搜索(A*算法)如何悄悄改变你的日常生活

本文探讨了启发式搜索(A*算法)如何从下棋到导航等多个领域重塑我们的智能生活。通过对比盲目搜索与启发式搜索的差异,揭示了A*算法在路径规划、智能家居和医疗诊断中的高效应用,展示了这一人工智能技术如何优化日常决策并提升效率。

weixin_31292729的博客 295

Statistics and Machine Learning Toolbox

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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Dota刀塔自走棋,《下棋阵容助手》微信小程序

以表格形式显示英雄关系。 查看热门阵容 收藏自己喜欢的阵容 微信扫码,或搜索《下棋阵容助手》

4rnold的专栏 2651

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

mac vs 返回上一步_搜索关键词加个「VS」有何用?学下棋、追剧都不在话下

在使用搜索引擎的时候,引号、星号、加减号等都能帮我们更快地搜到自己想要的结果,那你有没有试过在搜索词后边加个「VS」呢?近日,一位 medium 博主就介绍了「搜索词」+「VS」的妙用。利用该技巧创建的 ego graph 能帮你学习下棋、购买宠物,甚至是追剧。你是否尝试过在搜索引擎里输入一个关键词,然后再输入「vs」,看看它能给你自动匹配出什么东西?事实证明这还挺好玩的,而且还算得上是一种实用技...

weixin_42508792的博客 145

基于Java Swing五子棋小游戏设计和实现_四、五子棋小游戏设计与实现 使用javaswing完成一款五子棋小游戏 功能要求 1

/System.out.println(“外 :” + i + “,” + j + " mx:" + mx + " t:" + t);if (getType(x, y, 1 - sbw) == 1) //电脑可取胜。// 有成5,则直接下子,并退出循环…没有,则思考对方情况。// 差距小于1000,50%概率随机选取。// 预设己方下棋,并更新边界值。// 还原预设下棋位置以及边界值。// 搜索最优下棋点。// 预存当前边界值。// 预存当前边界值。// 还原预设边界值。

2401_84182337的博客 423

博弈树 (15分)

棋属于一种博弈游戏,博弈过程可以用树(博弈树)来表示。假设游戏由两个人( A 和 B )玩,开始由某个人从根结点开始走,两个人轮流走棋,每次只能走一步, 下一步棋只能选择当前结点的孩子结点,谁先走到叶子结点为胜。例如,对于下图所示的博弈树,若 A 先走,可以选 f , B 若选 h ,则 A 选 j 胜。

Cosmo9的博客 771

百度之星2015 1005 下棋

百度之星2015 1005 下棋 思路: 对于任意一个格子,设国王到达这个格子至少需要x步,骑士到达这个格子至少需要y步,则: 对于这个格子, 1)国王到达这个格子需要的步数为:x+k步,其中k=0,1,2,3,4,5,... 2)骑士到达这个格子需要的步数为:x+2*k步,其中k=0,1,2,3,4,5,... 然后对1000*1000个格子都算一遍最小相遇的步数,然后再取个最小

whai的专栏 1000

机器学习:手撕 AlphaGo(一)

对 AlphaGo 进行分析,探讨当时在全世界范围内引起广泛关注的模型是如何设计的

三翼鸟数字化平台的技术实践分享 1729

博弈的暴力

学到就是赚到

Luckfort 311
上一篇: 【树链剖分】【分类讨论】水果姐逛水果街Ⅲ
下一篇: 【Trie】【cogs173】词链
morestep
博客等级 码龄12年 20粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值