LocalIFS阶段实验报告 实验目的: 让局部择优搜索在vc++6.0中实验,增强对局部择优搜索的理解应用能力 实验概括: 这次实验室在深度优先搜索的基础上加以改进实现的,主要是增加了PayPrice()这个计算节点代价函数,以实现对扩展后的节点进行比较再扩展;以及对主函数的搜索情况也做出了相应的调整; 实验内容及步骤: intPayPrice(SNode *S) f(n)=d(n)+s(n); d(n)代表节点的深度,s(n)代表节点中每个数与其最终位置的距离; for(i=0; i<2; i++) { for(j=0; j<2; j++) { if(S->data[i][j]==1) { if(i==0 && j==0) pay=pay+0; else if(i==1 && j==1) pay=pay+2; else pay=pay+1; break; } } if(j<=1) break; } 用for循环对四宫格中的数进行查找,与目标位置进行比较,累加其代价pay值 主要是在主函数搜索时在每次生成新节点后在对其进行代价计算 int pay[2]={-1,-1}; DevelopSNode(Sn,So,c,n); if( !CheckExist(Q,Sn) & !CheckExist(St,Sn) ) { Sn->deep=tempdeep; pay[n-1]=PayPrice(Sn); if(pay[0]0) { destack(Q,S); Sn->parent=So; Enstack(Q,Sn); Enstack(Q,S); } else { Sn->parent=So; Enstack(Q,Sn); } } 将每个节点的代价用pay[2]函数存储,然后进行比较,如果后生成的兄弟节点pay[0]比pay[1]代价小,则先进行一次出栈,然后对新生成节点入栈,在对出栈节点入栈,实现代价小的节点在open表栈顶; 实验结果: 这次实验仅有close表的搜寻路径,尚未把so->sg的最终路径计算写入 实验总结: 加强了对局部择优搜索的理解应用能力,并且编程的实验能力也有了一定的经验积累; 本文来源:https://www.wddqw.com/doc/251f4efb32d4b14e852458fb770bf78a65293a90.html