当前位置: 代码迷 >> Java相关 >> 急 java 国际象棋问题 求助 先谢了
  详细解决方案

急 java 国际象棋问题 求助 先谢了

热度:201   发布时间:2010-05-28 20:49:40.0
急 java 国际象棋问题 求助 先谢了
国际象棋的马,按L型走,从一个给定的位置走,走遍每个格子,走的那个方法用树写!哪位高手帮帮忙。谢谢了!
搜索更多相关的解决方案: 国际象棋  java  

----------------解决方案--------------------------------------------------------
哎。。。。
----------------解决方案--------------------------------------------------------
算法是走下一步出路最少的第格子
----------------解决方案--------------------------------------------------------

没时间写啊!
就说说大概的意思了!
    就是建立一个数组作为象棋盘的二维棋点的坐标,马在棋盘上的走形(即一个算法),建一个循环(作为一个子函数来进行调用),在棋盘内走出从给定点所能走的所有的可能,选定另一点继续循环走下去,且不能重复,
一;对对所走的总步数与棋盘坐标书相比,判断是否重复
在走的路中,选出规定步数内没走完所有的坐标的,

二;对每步走的路径与前面所走的路对比,判断是否有重复
对所走的可行的路分别建立数组(用Vector的好点),在数组中实现选择
同时采用多线程,并用异常处理,以免死循环

在加上相应的输出,和GUI界面就行了

在这是基本的编辑思想,希望大家编写出来啊!!!
与大家分享!!

----------------解决方案--------------------------------------------------------
以下是引用爱OO你在2010-5-31 12:52:06的发言:


没时间写啊!
就说说大概的意思了!
    就是建立一个数组作为象棋盘的二维棋点的坐标,马在棋盘上的走形(即一个算法),建一个循环(作为一个子函数来进行调用),在棋盘内走出从给定点所能走的所有的可能,选定另一点继续循环走下去,且不能重复,
一;对对所走的总步数与棋盘坐标书相比,判断是否重复
在走的路中,选出规定步数内没走完所有的坐标的,

二;对每步走的路径与前面所走的路对比,判断是否有重复
对所走的可行的路分别建立数组(用Vector的好点),在数组中实现选择
同时采用多线程,并用异常处理,以免死循环

在加上相应的输出,和GUI界面就行了

在这是基本的编辑思想,希望大家编写出来啊!!!
与大家分享!!
顶起
----------------解决方案--------------------------------------------------------
    就是建立一个数组作为象棋盘的二维棋点的坐标,马在棋盘上的走形(即一个算法),建一个循环(作为一个子函数来进行调用),在棋盘内走出从给定点所能走的所有的可能,选定另一点继续循环走下去,且不能重复,
一;对对所走的总步数与棋盘坐标书相比,判断是否重复
在走的路中,选出规定步数内没走完所有的坐标的,
二;对每步走的路径与前面所走的路对比,判断是否有重复
对所走的可行的路分别建立数组(用Vector的好点),在数组中实现选择
同时采用多线程,并用异常处理,以免死循环
在加上相应的输出,和GUI界面就行了
马要走到某些位置,是需要重复走回到一些位置的,即在总路径中,一些坐标是有重复出现的。你这样的判断不成立。关键是如何避免马走死循环的方法。一个十多步的死循环路径,如何判断是否重复?

要找到最短路径的算法应该很难吧。不知道要用些什么数学方法?

如果不要最短路径,可以用这种方法:
将总路径分成很多小段,每段都是当前位置到一个空格的最短路径。
即先判断当前位置A到下一任意可能位置(B1,B2...Bn)是否有空格。有则选任意一个,以这点为当前位置重新开始寻找。没有空格则找这些可能位置(Bn)的下一步(C1,C2...Cn)有没有空格,一直循环到找到一个空格为止。然后重新开始找这个位置到一个空格的最短路径,一直到穷尽所有空格。要注意的是每次找到的最短路径必定没有重复的坐标。比如一条路径A->B2->C3->Dn, Dn的可能选择中必须和A,B2,C3进行判断,相同则剔除。



[ 本帖最后由 pigpigpigxk 于 2010-6-2 19:44 编辑 ]
----------------解决方案--------------------------------------------------------

      楼上的说
马要走到某些位置,是需要重复走回到一些位置的,即在总路径中,一些坐标是有重复出现的。
      这是不会的,比如说对于一个网格4*4的,
                  O    O    O    O    O
                  
                  O    O    O    O    O
     
                  O    O    O    0    O
      
          (0,0)O    O    O    O    O
按马走日,马从(0,0)到(2,1),得路径,同样可以用分三步去走,(0,0)〉(1,2),(1,2)〉(3,3),(3,3)>(2,1),正好是一个平行四边形的四个角点。

再一点是:对每走一步,其下一步所有可能走的路径,都会走一遍的,这种重复的工作人做不来得要程序来做,我们只要附加条件就可以得到我们所要的了,
程序不难做的。
   根据搂住的意思,从一个给定的位置走,走遍每个格子,肯定是一遍走完,不需要重复了,其实仔细想一下,重复就是我们所要避免的死循环,所以,我们只要
二;对每步走的路径与前面所走的路对比,判断是否有重复
(坐标对比)就可以了,
   别想的太难了,是机器作循环走,不是你,让程序走就可以,加限制条件即得到结果了!!!


----------------解决方案--------------------------------------------------------
你们慢慢循环吧

----------------解决方案--------------------------------------------------------
马要走到某些位置,是需要重复走回到一些位置的,即在总路径中,一些坐标是有重复出现的。
      这是不会的,比如说对于一个网格4*4的,
                  O    O    O    O    O
                 
                  O    O    O    O    O
   
                  O    O    O    0    O
     
          (0,0)O    O    O    O    O
按马走日,马从(0,0)到(2,1),得路径,同样可以用分三步去走,(0,0)〉(1,2),(1,2)〉(3,3),(3,3)> (2,1),正好是一个平行四边形的四个角点。
再一点是:对每走一步,其下一步所有可能走的路径,都会走一遍的,这种重复的工作人做不来得要程序来做,我们只要附加条件就可以得到我们所要的了,
程序不难做的。
   根据搂住的意思,从一个给定的位置走,走遍每个格子,肯定是一遍走完,不需要重复了,其实仔细想一下,重复就是我们所要避免的死循环,所以,我们只要
二;对每步走的路径与前面所走的路对比,判断是否有重复 (坐标对比)就可以了,
   别想的太难了,是机器作循环走,不是你,让程序走就可以,加限制条件即得到结果了!!!
从一个给定的位置,可以是(0,1)或其他,你如何能够证明总路径中没有重复的坐标就可以完成?如果不能够证明,你的想法是建立在猜测的基础上。把程序写出来测试一下吧!
----------------解决方案--------------------------------------------------------
都是厉害人物
----------------解决方案--------------------------------------------------------
  相关解决方案