广度优先 算法,各位帮帮。。急

来源:百度知道 编辑:UC知道 时间:2024/07/02 04:09:54
RT.
ab(0) = "牧野草原00,牧野草原01,牧野草原05,牧野草原07"
ab(1) = "牧野草原01,牧野草原00,牧野草原02"
ab(2) = "牧野草原02,牧野草原01,牧野草原12,牧野草原13"
ab(3) = "牧野草原03,牧野草原14,村口"
ab(4) = "牧野草原04,牧野草原06,牧野草原08,牧野草原10"
ab(5) = "牧野草原05,牧野草原00,牧野草原06"
ab(6) = "牧野草原06,牧野草原04,牧野草原05,万马草原_03"
ab(7) = "牧野草原07,牧野草原00,牧野草原10"
ab(8) = "牧野草原08,牧野草原04,牧野草原15,牧野草原16"
ab(9) = "牧野草原09,牧野草原22,牧野草原23"
ab(10) = "牧野草原10,牧野草原04,牧野草原07,牧野草原11"
ab(11) = "牧野草原11,牧野草原10,牧野草原12"
ab(12) = "牧野草原12,牧野草原11,牧野草原13"
ab(13) = "牧野草原13,牧野草原12,牧野草原14,牧野草原02"
ab(14) = "牧野草原14,牧野草原03,牧野草原13,牧野草原18"
ab(15) = "牧野草原15,牧野草原18,牧野草原20"
ab(16) = "牧野草原16,牧野草原18,牧野草原20"
ab(17) = "牧野草原17,牧野草原12,牧野草原24"
ab(18) = "牧野草原18,牧野草原14,牧野草原24"
ab(19) = "牧野草原20,牧野草原15,牧野草原16,牧野草原26"
a

个人对广度优先算法的理解是每次优先遍历父结点下的直接子结点,遍历完这些直接子结点之后再从这些子结点开始遍历他们的直接子结点,以此类推下去,直到找到终点。所以,此处肯定是需要使用到迭代了。在此我想写出我的思路来与楼主交流下。
1.确定startway点和endway点以后,找到startway点,并对该点下的子结点进行遍历。如你此处选择的startway是牧野草原04 即位置在ab(04),endway是牧野草原15,那么ab(04)下的直接子结点可认为是牧野草原06、牧野草原08和牧野草原10。我们开始按照广度优先算法遍历到牧野草原15。
2.首先我们遍历完04的子结点(06,08,10),发现没有15。
3.接下来我们遍历结点06的子结点(04,05,03),发现没有15.
4.然后,我们开始遍历结点08的子结点(4,15,16),发现15,于是整个遍历结束。
PS:对于回路的子结点不应该考虑遍历,比如06中04的回路。

如过我用C语言来写,你能看懂么?
如过我用C语言来写,你能看懂么?
1、程序开始(设置参数和数据结构)
2、获得起始点,建立数据头,建立行走历史
3、根据当前节点,对所有可能的下一步行走方法进行(4)步所述内容,CASE完毕删除当前节点(包括行走的历史和当前位置)。
4、判断行走的可行性。如果可行,判断是否达到目标,如果达到目标,输出行走历史并结束程序;如果没有达到目标,记录当前的行走历史和当前的位置重复第(3)步内容;如果判断当前步不可行,不做任何操作,转入第(3)步内容。
5、如果达到一定的深度没有答案,结束程序,提示没有结果。
数据结构采用这样的形式:一个链表头指向了当前深度下的所有可行的结果,然后遍历这个链表,对每种结果的下一步进行判断,如果可行就创建新的链表来记录。记得:同一深度的结果必须在同一个链表中。
我的程序中是只用了一个链表来存储这些结果的,一个头节点永远指向结果的头,一个当前节点指向正在计算下一步的那个节点,(当前节点之前的结果比当前的节点和当前节点之后的结果的深度要深一层,即我把新的可行的结果的数据存储到链表的头上去,当前节点的所有可能的下一步的情况都考虑了之后就删除当前节点)当