/** Metodo que escreve os clientes num ficheiro */ public void escreveLocalidades(String fileLocalidades, String fileLigacoes, int nrlocalidades) throws FileNotFoundException, IOException { PrintWriter printloc = new PrintWriter(fileLocalidades); PrintWriter printlig = new PrintWriter(fileLigacoes); Collection<Localidade> coll = this.localidades.values(); for (Localidade l : coll) { printloc.print(l.get_Codigopostal() + "|" + l.get_Nome()); Map<String, Ligacao> ligacoes = l.get_Ligacoes(); int nrligacoes = ligacoes.size(); Collection<Ligacao> colllig = ligacoes.values(); for (Ligacao lig : colllig) { printloc.print("|1"); printlig.println( l.get_Codigopostal() + "|" + lig.get_Localidaded() + "|" + lig.get_Distancia() + "|" + lig.get_Taxas()); } printloc.print("\n"); nrlocalidades--; if (nrlocalidades == 0) break; } printloc.close(); printlig.close(); }
/** Metodo que adiciona uma localidade na estrutura */ public boolean addLocalidade(Localidade localidade) { if (this.localidades.containsKey(localidade.get_Nome())) return false; else { this.localidades.put(localidade.get_Nome(), localidade.clone()); return true; } }
/** Metodo que le os clientes de um ficheiro */ public void lerLocalidades(String fileLocalidades, String fileLigacoes, int nrlocalidades) throws FileNotFoundException, IOException { BufferedReader readLoc = new BufferedReader(new FileReader(fileLocalidades)); BufferedReader readLig = new BufferedReader(new FileReader(fileLigacoes)); int nrligacoes; while (readLoc.ready() && nrlocalidades > 0) { String linhaLoc = readLoc.readLine(); StringTokenizer stLoc = new StringTokenizer(linhaLoc, "|"); nrligacoes = stLoc.countTokens() - 2; Localidade localidade = new Localidade(stLoc.nextToken(), stLoc.nextToken()); while (nrligacoes > 0 && readLig.ready()) { String linhaLig = readLig.readLine(); StringTokenizer stLig = new StringTokenizer(linhaLig, "|"); stLig.nextToken(); Ligacao lig = new Ligacao( stLig.nextToken(), Double.valueOf(stLig.nextToken()), Double.valueOf(stLig.nextToken())); localidade.addLigacao(lig); nrligacoes--; } this.addLocalidade(localidade); nrlocalidades--; } readLoc.close(); readLig.close(); }
/** Metdo que remove uma ligação */ public boolean removeligacao(Ligacao ligacao, String partida) { if (this.localidades.containsKey(partida)) { Localidade aux = this.localidades.get(partida); return aux.removeLigacao(ligacao); } return false; }
/** Metodo que adiciona uma ligação */ public boolean addLigacao(Ligacao ligacao, String partida) { if (this.localidades.containsKey(partida)) { Localidade aux = this.localidades.get(partida); return aux.addLigacao(ligacao.clone()); } return false; }
/** Metodo que devolve a estrutura de Localidades */ public Map<String, Localidade> get_Localidades() { Map<String, Localidade> res = new TreeMap<String, Localidade>(); Collection<Localidade> coll = this.localidades.values(); for (Localidade l : coll) res.put(l.get_Nome(), l.clone()); return res; }
/** Metodo que remove uma localidadade da estrutura de localidades */ public boolean removeLocalidade(Localidade localidade) { if (this.localidades.containsKey(localidade.get_Nome())) { Ligacao lig = new Ligacao(localidade.get_Nome(), 0, 0); Collection<Localidade> coll = this.localidades.values(); for (Localidade aux : coll) aux.removeLigacao(lig); this.localidades.remove(localidade.get_Nome()); return true; } return false; }
/** Metodo que calcula o nr localidades entre 2 localidades */ public int distancia(String partida, String destino, Vector<String> caminho) { HashMap<String, DijElem> elementos = new HashMap<String, DijElem>((int) (this.localidades.size() * 1.4)); DijElem elemAct; Localidade localAct; elemAct = new DijElem(partida, 0, "", _VIS_GREY); elementos.put(elemAct.get_Nome(), elemAct.clone()); int greycount = 1; while (greycount > 0) { elemAct = null; elemAct = verificaproxnodo(elementos); if (elemAct == null) return -1; localAct = this.localidades.get(elemAct.get_Nome()); if (localAct == null) return -1; greycount = distancia_aux(localAct.get_Ligacoes(), elemAct, elementos, greycount); elemAct.set_Vis(_VIS_BLACK); if (elemAct.get_Nome().equals(destino)) { caminho.add(destino); DijElem pcaminho = elemAct; while (!pcaminho.get_Pai().equals("")) { caminho.add(pcaminho.get_Pai()); pcaminho = elementos.get(pcaminho.get_Pai()); } return elemAct.get_Nrlocalidades(); } greycount--; } return -1; }
/** Metodo que adiciona varias localidades na estrutura */ public void addLocalidades(Collection<Localidade> localidades) { for (Localidade l : localidades) this.addLocalidade(l.clone()); }