예제 #1
0
파일: server.c 프로젝트: feldma/Zappy
static int		recv_client()
{
  struct timeval	tv;
  int			ret;

  tv.tv_sec = 0;
  tv.tv_usec = 0;
  set_read();
  set_write();
  if ((ret = select(*(g_zappy->highest) + 1,
		    &(g_zappy->read.fds),
		    &(g_zappy->write.fds), NULL, &tv)) < 0)
    return (server_error(SELECT_ERR));
  else if (ret == 0)
    return (0);
  return (get_actions());
}
예제 #2
0
int main(void)
{
    int n, m;
    char **maze = read_maze(&n, &m);

    // initialization
    fringe *f = fringe_init();
    fringe_enqueue(f, make_fringe_item(make_state(0, 0), NULL));
    int **closed_set = init_closed_set(n, m);

    // set up search helper-variables
    fringe_item *current_item;
    state *current_state;
    action *current_strategy;
    state *next_state;
    int num_actions, i;
    int *available_actions;
    int strategy_found = 0;
    action *strategy;

    // perform breadth first search
    while (!is_empty(f)) {
        current_item = fringe_dequeue(f);
        current_state = current_item->state;
        current_strategy = current_item->strategy;

        // goal state-check
        if (is_goal_state(current_state, n, m)) {
            strategy = current_strategy;
            strategy_found = 1;
            break;
        }

        // only proceed if the node has not been visited
        if (is_in_closed_set(current_state, closed_set)) {
            // free item?
            continue;
        }

        // put the current node into the closed set
        insert_into_closed_set(current_state, closed_set);


        // expand current node
        available_actions = get_actions(current_state, maze, &num_actions);

        for (i = 0; i < num_actions; i++) {
            next_state = apply(current_state, available_actions[i]);

            // add this state/action-pair to the fringe
            action *new_action = make_action(available_actions[i], current_strategy);
            fringe_enqueue(f, make_fringe_item(next_state, new_action));
        }

        free(current_item);
    }


    if (!strategy_found) {
        // don't do anything
    }
    else {
        display_and_free(reverse(strategy), make_state(0, 0));
        printf("[%d, %d]\n", n - 1, m - 1);
    }

    // free maze memory
    return 0;
}