void CGameGraphBuilder::generate_edges (const u32 &game_vertex_id) { graph_type::CVertex *vertex = graph().vertex(game_vertex_id); xr_vector<u32>::const_iterator I = m_current_fringe.begin(); xr_vector<u32>::const_iterator E = m_current_fringe.end(); for ( ; I != E; ++I) { VERIFY (!vertex->edge(*I)); float distance = path_distance(game_vertex_id,*I); graph().add_edge (game_vertex_id,*I,distance); } }
int main(int argc, char* argv[]) { if(argc > 1) { FILE* fptr = fopen(argv[1], "r"); assert(fptr != NULL); int city_c = count_cities(fptr); printf("City count: %d\n", city_c); city* cities[city_c]; read_cities(fptr, cities, city_c); print_cities(cities, city_c); printf("Distance between Helsinki and Espoo: %f km\n", distance(cities[1], cities[4])); printf("Path distance: %f km\n", path_distance(cities, city_c)); free_cities(cities, city_c); fclose(fptr); } return EXIT_SUCCESS; }
/*========================================== * 既存チャットルームに参加 *------------------------------------------ */ void chat_joinchat(struct map_session_data *sd, int chatid, const char* pass) { struct chat_data *cd; nullpo_retv(sd); if((cd = map_id2cd(chatid)) == NULL) return; if(cd->bl.m != sd->bl.m || sd->state.store || sd->state.joinchat || path_distance(cd->bl.x,cd->bl.y,sd->bl.x,sd->bl.y) > AREA_SIZE) { clif_joinchatfail(sd,3); return; } if(cd->limit <= cd->users || cd->users >= sizeof(cd->usersd)/sizeof(cd->usersd[0])) { clif_joinchatfail(sd,0); return; } if(cd->pub == 0 && strncmp(pass,cd->pass,8)) { clif_joinchatfail(sd,1); return; } if(linkdb_exists(&cd->ban_list, INT2PTR(sd->status.char_id))) { clif_joinchatfail(sd,2); return; } if(cd->zeny > sd->status.zeny) { clif_joinchatfail(sd,4); return; } if(cd->lowlv > sd->status.base_level) { clif_joinchatfail(sd,5); return; } if(cd->highlv < sd->status.base_level) { clif_joinchatfail(sd,6); return; } if((pc_get_job_bit(sd->s_class.job) & cd->job) == 0) { clif_joinchatfail(sd,7); return; } if(cd->upper) { if(((1<<sd->s_class.upper)&cd->upper) == 0) { clif_joinchatfail(sd,7); return; } } cd->usersd[cd->users] = sd; cd->users++; sd->chatID = cd->bl.id; sd->state.joinchat = 1; clif_joinchatok(sd,cd); // 新たに参加した人には全員のリスト clif_addchat(cd,sd); // 既に中に居た人には追加した人の報告 clif_dispchat(cd,-1); // 周囲の人には人数変化報告 chat_triggerevent(cd); // イベント return; }