1.问题描述:
假设中国象棋的棋盘上只有“将”和“帅”,这两个棋子。
根据象棋的规则,写出“将”和“帅”所有可能的合法位置。
要求只能声明一个变量。
2.建模
由棋盘上的布局可知,“将”和“帅”的运动范围在一个3×3
的格子里。
1——2——3
| | |
4——5——6
| | |
7——8——9
上面的模型模拟“将”或“帅”的所有可能位置,因为“将”和“帅”
不能同时在同一列,所以当“将”在1,4,7的位置时,“帅”在2,3,5,6,8,9位置。反之亦然。
下面用A代表“将”,用B代表“帅”来进行模拟。
public class Chess {
/**
* 第一种方法
*/
public static void solutionA(){
//包括不符合规则的情况,一共有81中情况
int iCount=81;
while(--iCount>0)
//iCount/9%3表示列
//iCount%9%3表示行
if(iCount/9%3!=iCount%9%3)
//输出符合规则的情况
System.out.println("A="+(iCount/9+1)+" B="+(iCount%9+1));
}
/**
* 第二种方法
*/
public static void solutionB(){
//定义一个类作为变量,C中可以用结构体表示
class Position{
//A的位置
public int A;
//B的位置
public int B;
}
//声明一个变量
Position p= new Position();
for(p.A=1;p.A<=9;p.A++)
for(p.B=1;p.B<=9;p.B++)
if(p.A%3!=p.B%3)
System.out.println("A="+p.A+" B="+p.B);
}
/**
* 测试
*/
public static void main(String[] args) {
//测试方法A
System.out.println("======第一种方法======");
Chess.solutionA();
//测试方法B
System.out.println("======第二种方法======");
Chess.solutionB();
}
}
这个问题及算法转自《编程之美》。
分享到:
相关推荐
有关中国象棋将帅问题的算法和vc++程序实现
象棋源码H5开发设计的象棋 AI在线对弈网页页面象棋源码【全新經典版+内嵌ai算法】 效果演示https://www.a5ymg.cn/571.html 【象棋源码】全新經典版H5开发设计的象棋完整篇AI在线对弈网页页面象棋源码 經典版H5开发...
中国象棋算法独家收藏,人机对战,通过各种渠道很难总结出来的。。。希望对大家有所帮助。
中国象棋的AI算法,一步一步教你学习AI设计,六个版本,难度逐次增加。非常好的学习资料。
机器博弃是人工智能一个传统的研究领城。从机器博弃的基本搜索算法谈起,依托中国象棋游 戏,介绍机器博弈理论中搜索算法的实现,尤其阐迷双方博弈的一般性理论及博弃最小最大化过程。详细介 绍基于c+十Builde潇言的...
C#中国象棋算法设 首先对棋盘进行初始化以,然后将每一个棋子给予初值;并将每个棋子放在棋盘对应的位置上,全部初始化完毕后就可以得到一个简易的摆好的象棋棋盘,其中红子的数值小于20,绿子的数值大于20。而后...
使用C#开发的基于遗传算法和神经网络的人工智能象棋算法
基于深度学习的天天象棋盘面自动识别算法
计算机象棋算法,非常全面的计算机象棋算法,支持人工智能的研究,支持中国象棋
中国象棋中人机对战机器的算法,才用的博弈树算法,希望对大家有帮助!
计算机博弈的代表,象棋小巫师,智能算法实例
中国象棋搜索算法研究 包括各种经典的搜索算法,可以作为入门参考
精华志 中国象棋算法设计 经典算法 京华志&精华志出品 分享资源 C# ASP.NET SQL DBA 源码
中国象棋的实现算法说明。使用Apabi Reader程序阅读。
象棋算法源码
博弈算法之中国象棋人机对战 人工智能,人机博弈,置换表
使用alpha-beta剪枝算法实现中国象棋人机对战,AI具有中级的智能,可以应对一般的象棋爱好者。
对算法进行优化,根据j.c.Warnsdorff规则设计算法,该规则是在所有可跳的方格中,马只可能走这样一个方格:从该方格出发,马能跳的方格数为最少;如果可跳的方格数相等,则从当前位置看,方格序号小的优先。 VS2017开发
计算机象棋算法,非常全面的计算机象棋算法,支持人工智能的研究,支持中国象棋
AI 人工智能 象棋游戏 AI 人工智能 象棋游戏 AI 人工智能 象棋游戏