Description 一个n*n(n>=2)棋盘上有黑白棋子各一枚.游戏者A和B轮流移动棋子,A先走. l         A的移动规则:只能移动白棋子.可以往上下左右四个方向之一移动一格. l         B的移动规则:只能移动黑棋子.可以往上下左右四个方向之一移动一格或者两格. 和通常的“吃子”规则一样,当某游戏者把自己的棋子移动到对方棋子所在的格子时,他就赢了.两个游戏者都很聪明,当可以获胜时会尽快获胜,只能输掉的时候会尽量拖延时间.你的任务是判断谁会赢,需要多少回合. 比如n=2,…
Description 一个n*n(n>=2)棋盘上有黑白棋子各一枚.游戏者A和B轮流移动棋子,A先走. l         A的移动规则:只能移动白棋子.可以往上下左右四个方向之一移动一格. l         B的移动规则:只能移动黑棋子.可以往上下左右四个方向之一移动一格或者两格. 和通常的“吃子”规则一样,当某游戏者把自己的棋子移动到对方棋子所在的格子时,他就赢了.两个游戏者都很聪明,当可以获胜时会尽快获胜,只能输掉的时候会尽量拖延时间.你的任务是判断谁会赢,需要多少回合. 比如n=2,…
http://www.lydsy.com/JudgeOnline/problem.php?id=3106 白棋如果第一步不能赢,那么一定输 因为可以黑棋走的距离比白棋大,黑棋可以下一步吃掉白棋,也可以下一步离开白棋的吃子范围 n才20,我们可以dfs搜索所有的局面求黑棋取胜的回合数 记录当前状态到游戏结束的回合数 如果现在白棋走,那它要尽可能的拖延时间,所以就是所有的后继状态取大 如果现在黑棋走,那它要尽快的取胜,所以就是所有的后继状态取小 边界是当两个棋子到同一位置时,根据前面的分析,应该必须…
点此看题面 大致题意: 在一张\(n*n\)的棋盘上有一枚黑棋子和一枚白棋子.白棋子先移动,然后是黑棋子.白棋子每次可以向上下左右四个方向中任一方向移动一步,黑棋子每次则可以向上下左右四个方向中任一方向移动一至二步.当某游戏者把自己的棋子移动到对方棋子所在的格子时,他就赢了.两个游戏者都很聪明,可以获胜时会尽快获胜,必输时会尽量拖延时间.试判断谁会赢,需要多少回合. 对抗搜索 这道题的做法应该是对抗搜索. 一波简单的分析 我们先来对题目进行一波简单的分析. 不难发现,因为黑棋每次能走的步数大于白…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3106 对抗搜索,f[x][y][a][b][c][d]表示当前谁走,走了几步,及位置. (因为脑残+手残+眼拙写了一坨if还瞪了好久...最后还是这种做法靠谱... #include<cstring> #include<iostream> #include<algorithm> #include<cstdio> #define maxn 109 #def…
3106: [cqoi2013]棋盘游戏 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 544  Solved: 233 Description 一个n*n(n>=2)棋盘上有黑白棋子各一枚.游戏者A和B轮流移动棋子,A先走. l         A的移动规则:只能移动白棋子.可以往上下左右四个方向之一移动一格. l         B的移动规则:只能移动黑棋子.可以往上下左右四个方向之一移动一格或者两格. 和通常的“吃子”规则一样,当某游戏者把…
前言 在一些复杂的博弈论题目中,每一轮操作都可能有许多决策,于是就会形成一棵庞大的博弈树. 而有一些博弈论题没有什么规律,针对这样的问题,我们就需要用一些十分玄学的算法. 例如对抗搜索. 对抗搜索简介 一. 对抗搜索的适用范围 在博弈论题目中,如果决策双方的获胜条件是截然相反的,即一方要求得分越高越好,另一方要求得分越低越好,这时我们就可以用上对抗搜索算法. 二.对抗搜索的主要思想 对抗搜索的核心思想就是\(dfs\)遍历一遍博弈树. 不难想到,如果博弈树非常庞大,在不加优化的情况下,对抗搜索的…
201803-4 棋局评估 这题主要使用对抗搜索,也就是每一步寻找可以下棋的位置,通过在这一步下棋看最后会取的什么样的分数. #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<string> using namespace std; const int INF=0x3f3f3f3f; int map[3][3]; bool row(…
3106: [cqoi2013]棋盘游戏 链接 分析: 极大极小搜索 + 记忆化. 代码 #include<bits/stdc++.h> using namespace std; typedef long long LL; const int INF = 1e9; ][][][][][]; ] = {,,,-,,,,-}; ] = {,-,,,,-,,}; int n; int Minimax(int player,int step,int a,int b,int c,int d) { ) r…
BZOJ 洛谷P4363 [Update] 19.2.9 重做了遍,感觉之前写的有点扯= = 首先棋子的放置情况是阶梯状的. 其次,无论已经放棋子的格子上哪些是黑棋子哪些是白棋子,之前得分如何,两人在剩下的棋盘上操作,结束时棋盘的状态也就是得分仍是确定的. (记忆化不和先前的得分有关系啊,想清楚.) 也就是我们可以记忆化.由上面的分析可知,我们只需要知道每一行现在放了多少个棋子了.事实上这种状态确实不是很多. 搜索的时候是个极大极小搜索,记先手与后手的得分差,先手会最大化这个差,后手会最小化这个…