Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [JAVA] acquisire grafo da input

    per la risoluzione di un esercizio mi ritrovo a dover acquisire,anzi,costruire un grafo partendo da alcune righe contenenti dei char passati in input :

    es :

    S....
    .###.
    .##..
    ###.#

    il grafo deve avere i char 'S' e '.' nei vertici,e gli archi devono collegare i vertici che nell'input sono adiacenti.il carattere # dev'essere ignorato.
    ad esempio il vertice contenente 'S' dev'essere collegato con un arco a 2 vertici contenenti '.' ,cioè quello alla destra di S e quello sotto a S.
    per salvare i vertici nella lista dedicata ho pensato di scandire l'array di char ricavato facendo s.tocharArry() dove s è la singola stringa di input.tramite quest'array potrei anche salvare gli archi "consecutivi" nell'altra lista dedicata.come fare però per gli archi diciamo verticali???cioè come faccio a fare un arco tra il vertice S il vertice . della riga sottostante(che quindi apparterrebbe a un altro array di caratteri)?

    spero di essermi spiegato al meglio.

    @ mods:non ho trovato da nessuna parte l'obbligo di presentazione,che c'è sulla maggior parte dei forum.se anche qui c'è e non me ne sono accorto perchè non ho cercato abbastanza scustemi e segnalatemelo così provvederò subito

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480

    Moderazione

    Originariamente inviato da cannetta89
    @ mods:non ho trovato da nessuna parte l'obbligo di presentazione,che c'è sulla maggior parte dei forum.se anche qui c'è e non me ne sono accorto perchè non ho cercato abbastanza scustemi e segnalatemelo così provvederò subito
    Non c'è l'obbligo di presentazione, però dato che riporti il testo di un esercizio per cui chiedi aiuto, dovresti anche includere la tua proposta di soluzione per consentirci di suggerirti correzioni e/o migliorie.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    è un homework per l'università,quindi non posto il testo ufficiale e non ho chiesto la soluzione di tutto l'esercizio per non essere scorretto(se tutti chiedessimo aiuto nei forum,non avrebbe senso l'assegnazione degli esercizi,dato che hanno anche un peso nella valutazione finale dell'esame)...

    comunque spiego in breve qual è l'obiettivo :

    ho un labirinto tridimensionale e devo trovare e stampare in outptut il tempo minimo che impiego per uscirne.
    il labirinto è composto in questo modo : ho un input di righe la prima delle quali è rappresentata da tre interi L,R e C che si riferiscono rispettivamente al numero di livelli del labirinto,al numero di righe e al numero di colonne.
    Seguono quindi L blocchi da R righe ciascuno; ciascuna di queste righe contiene C caratteri. Ogni carattere descrive una cella del labirinto. Una cella piena di roccia è indicata dal carattere ’#’, mentre le celle percorribili sono rappresentate dal carattere ’.’
    La vostra posizione di partenza è indicata dalla lettera maiuscola ’S’ e l’uscita è indicata dalla lettera maiuscola ’E’.
    Ogni livello è infine seguito da una riga vuota.
    ci si può spostare soltanto da un blocco all'altro che contiene il carattere '.' a patto che siano adiacenti,quindi a destra,sinistra,sopra,sotto,in alto sul livello successivo o in basso sul livello precedente.

    esempio di input :

    3 4 5
    S....
    .###.
    .##..
    ###.#

    #####
    #####
    ##.##
    ##...

    #####
    #####
    #.###
    #### E

    ogni spostamento impiega untempo t=1,quindi in questo esempio la soluzione da stampare è 11.

    ho pensato di implementarlo con i grafi ed usare l'algoritmo pathDFS per trovare i percorsi.

    queste le prime righe che ho buttato giù :

    codice:
    static class Graph{
       static List<Vertex> lv;
       static List<Edge> le;
       public Graph(){
          lv=new ArrayList<Vertex>();
          le=new ArrayList<Edge>();
       }
       public void insertVertex(Vertex v){
          lv.add(v);
       }
       public void insertEdge(Vertex v,Vertex w){
          le.add(new Edge(v,w));
       }
       public List<Edge> incidentEdges(Vertex v){
          List<Edge> res=new ArrayList<Edge>();
          Iterator<Edge> it=le.iterator();
          while(it.hasNext()){ 
             Edge ep=it.next();
             if(ep.orig.equals(v) || ep.dest.equals(v))
                res.add(ep);
             return res;
          }
       }
    
    static class Vertex{
       String elem;
       String label;
       public Vertex(String e){
          this.elem=e;
       }
       public void setLabel(String l){
          this.label=l;
       }
    }
    
    static class Edge{
       String label;
       Vertex orig;
       Vertex dest;
       public Edge(Vertex o,Vertex d){
          this.orig=o;
          this.dest=d;
       }
       public void setLabel(String l){
          this.label=l;
       }
    }
    le modalità con cui voglio acquisire e creare il grafo le ho illustrate nel primo post insieme al relativo problema su cui ho un dubbio e per il quale vi chiedo aiuto.non voglio una soluzione per l'esercizio intero,perchè come ho già detto non sarebbe corretto e perchè a quel punto non sarebbe costruttivo..grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.