大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
可以采用广度优先搜索,程序如下:
沂南网站建设公司创新互联,沂南网站设计制作,有大型网站制作公司丰富经验。已为沂南近1000家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的沂南做网站的公司定做!
#include iostream
#include string
#include algorithm
#include set
#include queue
using namespace std;
struct node{
string str, step;
node(){}
node(string str, string step = ""): str(str), step(step){}
};
int main(){
string start = "0111222", dest = "2221110";
node n;
queuenode Open;
setstring Close;
Open.push(node(start));
while(1){
n = Open.front();
Open.pop();
Close.insert(n.str);
if(n.str == dest)break;
int l = n.str.find("0");
for(int i=-3; i=3; i++){
if(!i || l+i0 || l+i=dest.size())
continue;
string s(n.str);
s[l] = s[l+i];
s[l+i] = '0';
if(Close.find(s) == Close.end())
Open.push(node(s, n.step + char('0'+l+i) + " "));
}
}
cout n.step;
}
程序输出:
1 4 2 5 6 3 0 2 5 6
// 表示每一步移动哪个棋子,最开始棋子编号0
算法优化:可考虑使用A*算法进行启发式搜索
import java.awt.*;
import javax.swing.JFrame;
public class JumpChess extends JFrame{
public JumpChess(){
setSize(800,800); setVisible(true);
setBackground(Color.pink);
}
public void paint(Graphics g){ g.setColor(Color.gray); int x=290; int y=140; int x1=330;
for(int row=1;row13;row++){ g.drawLine(x,y,x1,y);
x=x-20;
x1=x1+20;
y=y+30;
System.out.println(); }
int x2=110; int y2=230; int x3=90; int y3=260;
for(int row=1;row13;row++){ g.drawLine(x2,y2,x3,y3); x2=x2+40; x3=x3+20; y3=y3+30;
System.out.println();
}
int x4=510; int y4=230; int x5=530; int y5=260;
for(int row=1;row13;row++){ g.drawLine(x4,y4,x5,y5); x4=x4-40; x5=x5-20; y5=y5+30;
System.out.println();
}
int x6=510;
这个其实和五子棋 象棋的寻址区别不大,都是最佳算法
其实主要看搜索深度的,我以前自己做过五子棋和象棋的java版本
有很多算法实现 你用alpha beta或者置换表都可以
验证做好的是最忧搜索+置换表+历史启发,现在不写那些了 代码不好找 你去网上搜索五子棋人工智能就应该有