首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

哪位高手知道跳棋的算法

2012-03-09 
谁知道跳棋的算法?请问谁有判断跳棋走棋路径正确性的算法?就是当从鼠标的点击事件中得知起棋点和落棋点的

谁知道跳棋的算法?
请问谁有判断跳棋走棋路径正确性的算法?

就是当从鼠标的点击事件中得知起棋点和落棋点的坐标后,计算机要根据棋盘上的棋子摆放判断一下棋子是否能从起棋点走到落棋点。听说要吧所有可跳达点形成图,然后求最短路径,谁还能说的更具体些?怎么将跳棋上的可跳达点构成图呢?还有其他算法吗?万分感谢!

这个算法稍加修改,还能成为计算机走棋的算法。

[解决办法]
如果不要求最短路径,用迷宫求解那种深度优先递归就可以了。要最短路径,就要广度优先了。
[解决办法]

○○
○○○
○○○●○○●○○○
○○○●○●○○○
○○○●●○○○
●●●◎●●●
○○○●●○○○
○○○●○●○○○
○○○●○○●○○○
○○○
○○



3
2 ○
1 ○○
y0 ●●○
●●●○
x0 ●●○
1 ○○
2 ○
3

x y0 1 2 3
0 ●●⊙⊙
1 ●●●⊙
2 ⊙●●⊙
3 ⊙⊙⊙⊙

2
1
y0 ○○
○○○
x0 ○○
1
2
若棋子的起始位置在x,y
则周围6个相连的棋格为:
(x-1,y-1)
(x-1,y)
(x,y-1)
(x+1,y)
(x,y+1)
(x+1,y+1)

○ ○
●●
○●○●○●○●○
●●
○ ○


假设棋盘是一个二维数组 qp[x][y] 0为没有棋子 1为有棋子
可以到达的区域也是一个二维数组 qy[][] 0为不可到达 1为可到达

tq(int x,int y)//跳棋
{
if(qy[x][y]!=1)
qy[x][y]=1;

if(qp[x-1][y-1]==1&&qy[x-2][y-2]!=1)
{
tq(x-2,y-2);
}
if(qp[x-1][y]==1&&qy[x-2][y]!=1)
{
tq(x-2,y);
}
if(qp[x][y-1]==1&&qy[x][y-2]!=1)
{
tq(x,y-2);
}
if(qp[x+1][y+1]==1&&qy[x+2][y+2]!=1)
{
tq(x+2,y+2);
}
if(qp[x+1][y]==1&&qy[x+2][y]!=1)
{
tq(x+2,y);
}
if(qp[x][y+1]==1&&qy[x][y+2]!=1)
{
tq(x,y+2);
}
}

abc(int x,int y)
{
if(qp[x][y]==0)
qy[x][y]=1;

if(qp[x-1][y-1]==0&&qy[x-1][y-1]!=1)
abc(x-1,y-1);
if(qp[x-1][y]==0&&qy[x-1][y]!=1)
abc(x-1,y);
if(qp[x][y-1]==0&&qy[x][y-1]!=1)
abc(x,y-1);
if(qp[x+1][y]==0&&qy[x+1][y]!=1)
abc(x+1,y);
if(qp[x][y+1]==0&&qy[x][y+1]!=1)
abc(x,y+1);
if(qp[x+1][y+1]==0&&qy[x+1][y+1]!=1)
abc(x+1,y+1);

tq(x,y);
}//先判断周围6个格子能不能走得通 再判断能不能跳一个棋子到某个地方

临时想到的办法
不知道行不

热点排行