public boolean induzido(Grafo grafo) { int cont; for (int i = 0; i < vColoridos.size(); i++) { int nome = ((Integer) vColoridos.get(i)).intValue(); ArrayList adja = grafo.getAdjacencias(grafo.getVerticeByNome(nome)); cont = 0; for (int j = 0; j < adja.size(); j++) if ((grafo.getAcendedor()).estaAceso((Vertice) adja.get(j))) cont++; if (cont != ((ArrayList) aColoridas.get(i)).size()) return false; } return true; }
public static void main(String args[]) { Grafo teste = new Grafo(); teste.setVertices(lerGrafo(args[0])); Vertice i1 = new Vertice(); Vertice i2 = new Vertice(); i1 = teste.encontrarVertice(args[1]); i2 = teste.encontrarVertice(args[2]); List<Vertice> resultado = new ArrayList<Vertice>(); Dijkstra algoritmo = new Dijkstra(); resultado = algoritmo.encontrarMenorCaminhoDijkstra(teste, i1, i2); System.out.println("Esse é o menor caminho feito pelo algoritmo:" + resultado); }
public String execAnalise(Grafo grafo) { vColoridos = new ArrayList(); // vertices coloridos aColoridas = new ArrayList(); // arestas coloridas for (int i = 0; i < grafo.getQtdVertices(); i++) if ((grafo.getAcendedor()).estaAceso(grafo.getVertice(i))) vColoridos.add(new Integer((grafo.getVertice(i)).getNome())); if (vColoridos.size() != 0) { for (int i = 0; i < vColoridos.size(); i++) { Vertice colorido = grafo.getVerticeByNome(((Integer) vColoridos.get(i)).intValue()); ArrayList adjacencias = grafo.getAdjacencias(colorido); ArrayList a = new ArrayList(); for (int j = 0; j < adjacencias.size(); j++) { Vertice V = (Vertice) adjacencias.get(j); if (pertenceColoridos(V.getNome())) if ((grafo.getAcendedor()).estaAceso(grafo.getArestaEntreVertices(colorido, V))) a.add(new Integer(V.getNome())); } aColoridas.add(a); } return subgrafo(grafo); } else return "Escolha um subgrafo!"; }
public static List<Vertice> lerGrafo(String nomeArquivo) { Grafo g = new Grafo(); Vertice v; File f = new File(nomeArquivo); String vertices[]; String linha; ArrayList<String[]> s1 = new ArrayList<String[]>(); try { BufferedReader br = new BufferedReader(new FileReader(f)); Map<String, Vertice> mapa = new HashMap<String, Vertice>(); while ((linha = br.readLine()) != null) { if (linha.contains(",")) { s1.add(linha.split("/")); vertices = s1.get(0)[0].split(","); v = (Vertice) mapa.get(vertices[0]); if (v == null) v = new Vertice(); List<Vertice> vizinhosAtual = new ArrayList<Vertice>(); List<Aresta> arestasAtual = new ArrayList<Aresta>(); v.setDescricao(vertices[0]); mapa.put(vertices[0], v); if (linha.contains("/")) { String pesoArestas[] = s1.get(0)[1].split(","); for (int i = 1; i < vertices.length; i++) { Vertice vit; // vit = g.encontrarVertice(vertices[i]); vit = mapa.get(vertices[i]); if (vit == null) vit = new Vertice(); vit.setDescricao(vertices[i]); vizinhosAtual.add(vit); mapa.put(vertices[i], vit); Aresta ait = new Aresta(v, vit); ait.setPeso(Integer.parseInt(pesoArestas[i - 1])); arestasAtual.add(ait); } v.setVizinhos(vizinhosAtual); v.setArestas(arestasAtual); } } // Vertices finais else { // v = g.encontrarVertice(linha); v = (Vertice) mapa.get(linha); if (v == null) v = new Vertice(); v.setDescricao(linha); mapa.put(linha, v); } g.adicionarVertice(v); s1.clear(); } // catch do BufferedReader } catch (FileNotFoundException e) { System.out.println("Nao encontrou o arquivo"); e.printStackTrace(); } // catch do readLine catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // Retornando os vertices return g.getVertices(); }
///////////////////////////////////////////////////////// Crear grafo a partir de un archivo // /////////////////////////////////////////////// public Grafo Grafo(String n) { Grafo g = null; File file = new File(n); try { String line; FileReader filer = new FileReader(file); BufferedReader buf = new BufferedReader(filer); String linea = buf.readLine().trim(); boolean seguir = true; if (linea != null) { if (!linea.equals("d") && !linea.equals("n")) { System.out.println("El archivo está mal escrito"); } else { StringTokenizer token = new StringTokenizer(linea); String Dir = token.nextToken(); linea = buf.readLine().trim(); token = new StringTokenizer(linea); int nV = Integer.parseInt(token.nextToken()); token = new StringTokenizer(linea); linea = buf.readLine().trim(); token = new StringTokenizer(linea); int nL = Integer.parseInt(token.nextToken()); boolean dirigido = false; if (Dir.equals("d")) { System.out.println("Dirigido"); g = new GrafoDirigido(); dirigido = true; } else if (Dir.equals("n")) { System.out.println("NoDirigido"); g = new GrafoNoDirigido(); dirigido = false; } int i = 0; while (i < nV && (linea = buf.readLine().trim()) != null) { token = new StringTokenizer(linea); String idVer = token.nextToken(); double peso = Double.parseDouble(token.nextToken()); Vertice ver = new Vertice(peso, idVer); g.agregarVertice(g, ver); i++; } i = 0; while (i < nL && (linea = buf.readLine().trim()) != null) { token = new StringTokenizer(linea); String idL = token.nextToken(); String idv1 = token.nextToken(); String idv2 = token.nextToken(); double peso2 = Double.parseDouble(token.nextToken()); if (dirigido == true) { Arco ac = new Arco(peso2, idL, idv1, idv2); ((GrafoDirigido) g).agregarArco(((GrafoDirigido) g), ac); } else { Arista at = new Arista(peso2, idL, idv1, idv2); ((GrafoNoDirigido) g).agregarArista(((GrafoNoDirigido) g), at); } ; i++; } ; System.out.println("El grafo se creo exitosamente!!"); g.vertices(g); g.lados(g); } } buf.close(); } catch (FileNotFoundException e) { System.out.println("El archivo no existe"); g = new GrafoDirigido(); } catch (IOException e) { System.out.println("Excepcion, intente de nuevo"); } return g; }