/* check a text starting at 0 if it fulfills the regular expression * will search for the longest pattern that matches the RE * if at any moment we reach the final state, we store it in longestfound * but we continue to search so the we find indeed the longest txt * if it is successful will return the length of the match * if it in UNsucessful will return -1 */ int check_nfa(const graphtp & g, const char * re, int relen, const char * text, int len, int & counter) { out("check_nfa re='%s' text='%s'\n", re, text); int longestfound = -1; vi st; vi visited(relen+1); dfs(g, 0, visited); // get all possible states reachable from start state 0 get_visited(visited, st); print_visited(visited); for(int i = 0; i < len && !st.empty(); i++) { for(vi::iterator it = st.begin(); it != st.end(); ++it) { int s = *it; if(s == relen) continue; //need to continue search tho if(text[i] == re[s] || re[s] == '.') { counter++; s = s + 1; //find ne state after it dfs(g, s, visited); //find all e-transitions from s } } if(visited.back()) longestfound = i; get_visited(visited, st); print_visited(visited); } out("longestfound='%d'\n", longestfound); return longestfound; }
void main(){ int i,j; for(i = 0;i < n; i++ ){ for(j = 0;j < n; j++ ){ if(i == 0 && j == 1){ conn[i][j] = 1; cost[i][j] = 0; }else if(i == 0 && j == 6){ trconn[i][j] = 1; trcost[i][j] = 0; }else if(i == 1 && j == 2){ conn[i][j] = 1; cost[i][j] = 9; trconn[j][i] = 1; trcost[j][i] = 9; }else if(i == 1 && j == 3){ conn[i][j] = 1; cost[i][j] = 5; trconn[j][i] = 1; trcost[j][i] = 5; }else if(i == 2 && j == 4){ conn[i][j] = 1; cost[i][j] = 2; trconn[j][i] = 1; trcost[j][i] = 2; }else if(i == 2 && j == 5){ conn[i][j] = 1; cost[i][j] = 1; trconn[j][i] = 1; trcost[j][i] = 1; }else if(i == 2 && j == 7){ conn[i][j] = 1; cost[i][j] = 3; trconn[j][i] = 1; trcost[j][i] = 3; }else if(i == 3 && j == 5){ conn[i][j] = 1; cost[i][j] = 6; trconn[j][i] = 1; trcost[j][i] = 6; }else if(i == 3 && j == 6){ conn[i][j] = 1; cost[i][j] = 6; trconn[j][i] = 1; trcost[j][i] = 6; }else if(i == 4 && j == 5){ conn[i][j] = 1; cost[i][j] = 2; trconn[j][i] = 1; trcost[j][i] = 2; }else if(i == 4 && j == 6){ conn[i][j] = 1; cost[i][j] = 3; trconn[j][i] = 1; trcost[j][i] = 3; }else if(i == 5 && j == 6){ conn[i][j] = 1; cost[i][j] = 2; trconn[j][i] = 1; trcost[j][i] = 2; }else if(i == 7 && j == 6){ conn[i][j] = 1; cost[i][j] = 2; trconn[j][i] = 1; trcost[j][i] = 2; }else{ conn[i][j] = 0; cost[i][j] = 0; trconn[j][i] = 0; trcost[j][i] = 0; } } } trconn[0][6] = 1; printf("trconn[%d][%d] = %d\n",0,6,trconn[0][6]); for(i = 0;i < n; i++ ){ for(j = 0;j < n; j++ ){ printf("%d ",conn[i][j]); } printf("\n"); } printf("\n"); for(i = 0;i < n; i++ ){ for(j = 0;j < n; j++ ){ printf("%d ",cost[i][j]); } printf("\n"); } printf("\n"); for(i = 0;i < n; i++ ){ for(j = 0;j < n; j++ ){ printf("%d ",trconn[i][j]); } printf("\n"); } printf("\n"); for(i = 0;i < n; i++ ){ for(j = 0;j < n; j++ ){ printf("%d ",trcost[i][j]); } printf("\n"); } printf("\n"); route[0] = 1; r++; prepare_generic_func(0,0); Uniform_cost_search(1,1); print_visited(); printf("Optimum Path : "); printpath(p,0); printcost(p,0); printf("\n\n"); }