int extract_1P( int max, Bool H_info ) { static Bool first_call = TRUE; int i, max_goal_level, time; if ( first_call ) { for ( i = 0; i < gnum_ft_conn; i++ ) { gft_conn[i].is_true = INFINITY; gft_conn[i].is_goal = FALSE; gft_conn[i].ch = FALSE; } for ( i = 0; i < gnum_op_conn; i++ ) { gop_conn[i].is_used = INFINITY; } for ( i = 0; i < gnum_ef_conn; i++ ) { gef_conn[i].in_plan = FALSE; } lch_F = ( int * ) calloc( gnum_ft_conn, sizeof( int ) ); lnum_ch_F = 0; lused_O = ( int * ) calloc( gnum_op_conn, sizeof( int ) ); lnum_used_O = 0; gin_plan_E = ( int * ) calloc( gnum_ef_conn, sizeof( int ) ); gnum_in_plan_E = 0; first_call = FALSE; } reset_search_info(); if ( (max_goal_level = initialize_goals( max )) == INFINITY ) { return INFINITY; } lh = 0; for ( time = max_goal_level; time > 0; time-- ) { achieve_goals( time ); } if ( H_info ) { collect_H_info(); } return lh; }
int extract_1P( int max, Bool H_info ) { static Bool first_call = TRUE; int i, max_goal_level, time, r; if ( first_call ) { for ( i = 0; i < gnum_ft_conn; i++ ) { gft_conn[i].is_true = INFINITY; gft_conn[i].is_goal = FALSE; gft_conn[i].ch = FALSE; } for ( i = 0; i < gnum_op_conn; i++ ) { gop_conn[i].is_used = INFINITY; } for ( i = 0; i < gnum_ef_conn; i++ ) { gef_conn[i].in_plan = FALSE; } lch_F = ( int * ) calloc( gnum_ft_conn, sizeof( int ) ); lnum_ch_F = 0; lused_O = ( int * ) calloc( gnum_op_conn, sizeof( int ) ); lnum_used_O = 0; gin_plan_E = ( int * ) calloc( gnum_ef_conn, sizeof( int ) ); gnum_in_plan_E = 0; first_call = FALSE; } reset_search_info(); if ( (max_goal_level = initialize_goals( max )) == INFINITY ) { return INFINITY; } //new from Y. Chen for(i=0; i<known_iga_list.num_F; i++) { if(gft_conn[known_iga_list.F[i]].level == INFINITY) { //printf("known_iga blocking\n"); return INFINITY; } } //---------------- for ( time = max_goal_level; time > 0; time-- ) { achieve_goals( time ); } if ( H_info ) { collect_H_info(); } r = lnum_used_O; if ( lnew_goal ) { reset_search_info(); source_to_dest( &lgoals, &ggoal_state ); if ( (max_goal_level = initialize_goals( max )) == INFINITY ) { return INFINITY; } for ( time = max_goal_level; time > 0; time-- ) { achieve_goals( time ); } } return r; }