public function_search(point, step, header){
g_MaxSearch1+=1
new i
for(i=1; i<=5; i++){
if(g_PointNet[point][i]==-1 || g_PointNet[point][i]==header ||g_PointNet[point][i]==0) continue;
if(g_ArrayCost[g_PointNet[point][i]]==0 || g_ArrayCost[g_PointNet[point][i]]>step) {
g_ArrayCost[g_PointNet[point][i]]=step
function_search(g_PointNet[point][i], step+1, point)
}
}
}
public function_search2(point, step, header, PointFinish){
if(g_FlagEndSearch==0) return
g_MaxSearch2+=1
new i, j
for(i=1; i<=5; i++){
if(point==PointFinish && step==g_ArrayCost[PointFinish]) {
g_FlagEndSearch=0; break;}
if(point!=PointFinish && step==g_ArrayCost[PointFinish]) break;
if(g_PointNet[point][i]==-1 || g_PointNet[point][i]==header || g_PointNet[point][i]==0) continue;
if(g_ArrayCost[g_PointNet[point][i]]<=step) continue;
if(g_FlagEndSearch==0) return
g_CompletePatch[step+1]=g_PointNet[point][i]
function_search2(g_PointNet[point][i], step+1, point, PointFinish)
}
}