Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di izzusan
    Registrato dal
    Apr 2003
    Messaggi
    463

    problema cerca elementi in un grafo

    ciao ragazzi ho un problema . . .

    devo cercare un percorso in un grafo (es se dal nodo a e' possibile andare dal nodo b) usando lo schema di matrici

    es ho una matrice 5x5 (xche ho 5 nodi)

    e cerco di trovare 1 dove c'e' un nodo e zero dove nn c'e'...
    ma non so come controllarli e nn so come verificare es se dal nodo a e possibile arrivare dal nodo e . . .

    codice:

    public class trovaNodo {
    public static void main(String[] args){

    int grafo[][] = new int [5][5];

    grafo[0][0]=0;
    grafo[0][1]=1;
    grafo[0][2]=1;
    grafo[0][3]=0;
    grafo[0][4]=0;
    grafo[1][0]=0;
    grafo[1][1]=0;
    grafo[1][2]=1;
    grafo[1][3]=0;
    grafo[1][4]=0;
    grafo[2][0]=0;
    grafo[2][1]=0;
    grafo[2][2]=0;
    grafo[2][3]=1;
    grafo[2][4]=0;
    grafo[3][0]=0;
    grafo[3][1]=0;
    grafo[3][2]=0;
    grafo[3][3]=0;
    grafo[3][4]=1;
    grafo[4][0]=0;
    grafo[4][1]=0;
    grafo[4][2]=0;
    grafo[4][3]=0;
    grafo[4][4]=0;


    /* stampa la matrice */
    for(int i=0; i<=4; i=i+1) {
    for(int j=0; j<=4; j=j+1) {
    if( grafo[i][j]==0 ) {
    System.out.print("[ ]");
    }
    else {
    System.out.print("[*]");
    }
    }
    System.out.println("");
    }






    }
    }




    }
    }

    non so proprio come fare... spero il problema sia chiaro. . . grassie

  2. #2
    Utente di HTML.it L'avatar di izzusan
    Registrato dal
    Apr 2003
    Messaggi
    463
    nessuno che ha qualcche idea??

  3. #3
    Utente di HTML.it L'avatar di izzusan
    Registrato dal
    Apr 2003
    Messaggi
    463
    help meeeeeeeeeeeeeeeeee

  4. #4
    Utente di HTML.it L'avatar di izzusan
    Registrato dal
    Apr 2003
    Messaggi
    463
    ciao ragazzi sono riuscito a risolvere il problema facendolo ricorsivo:

    scegliNodo(0,0,4, grafo);

    }
    public static void scegliNodo (int i,int x, int y, int grafo[][])
    {



    for(int j=0; j<5; j=j+1)
    {
    if(i==x && j==y && grafo[i][j] ==1){
    System.out.println("nodo trovato"+i);
    }
    else
    System.out.println("nodo non trovato"+i);

    if( grafo[i][j] == 1 )
    {
    System.out.println("Nodo" +i);
    System.out.println(+j);
    int temp;
    temp = j;
    scegliNodo(temp,x, y, grafo);

    }




    }
    }
    }


    ora, qualcuno puo' aiutarmi a farlo o a spiegarmi come si puo' fare senza ricorsione??

    io ho pensato faccio 2 cicli for . . . e faccio i vari controlli ma nn funziona. . .

    grAZIE . . . .

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    76
    immagino tu stia studiando informatica, solo li si fanno sti esercizi sbattimento

    questa se non erro si risolve con la programmazione dinamica:
    devi trovare il percorso ottimo?
    il grafo è aciclico?
    puoi passare da nodi gia visitati?

  6. #6
    Utente di HTML.it L'avatar di izzusan
    Registrato dal
    Apr 2003
    Messaggi
    463
    ehehhe esattamente....solo qui possiamo fare certi es!!
    allora io praticamente dato un grafo, che ho poi rappresentato con matrice; devo controllare che da un dato inizio si possa raggiungere ad una data fine... ES da A voglio raggiungere E.

    Se ad es ho questi collegamenti ab, ac, bc, cd, de allora tutto funziona ma se per caso analizzando il primo percorso possibile(cioè passando da b) e supponendo che b non fosse collegato a nulla devo fare in modo che il mio algoritmo torni ad analizzare il secondo percorso disponibile(cioe passando da c).
    ora io sono riuscita a risolvere il caso in cui da A passando dal primo collegamento possa raggiungere il verticeE, facendo alcuni controlli...

    ora pero nn riesco a capire come fare ad analizzare tutta la mia colonna,perchè ad ora appena trova un primo valore l'algoritmo scorre perdendo gli eventuali nodi successivi(ad es se da A posso raggiungere sia D che E lui si ferma a D e non mi dice che il percorso è gia possibile da li...
    )

    forse son stato un po lungo...spero hai capito cosa voglio dire...comunque ecco il mio codice:

    {
    public static void main(String[] args)
    {

    int grafo[][] = new int [5][5];

    grafo[0][0]=0;//riga A
    grafo[0][1]=1;
    grafo[0][2]=1;
    grafo[0][3]=0;
    grafo[0][4]=0;
    grafo[1][0]=0;//riga B
    grafo[1][1]=0;
    grafo[1][2]=1;
    grafo[1][3]=0;
    grafo[1][4]=0;
    grafo[2][0]=0;//riga C
    grafo[2][1]=0;
    grafo[2][2]=0;
    grafo[2][3]=1;
    grafo[2][4]=1;
    grafo[3][0]=0;//riga D
    grafo[3][1]=0;
    grafo[3][2]=0;
    grafo[3][3]=0;
    grafo[3][4]=1;
    grafo[4][0]=0;//riga E
    grafo[4][1]=0;
    grafo[4][2]=0;
    grafo[4][3]=0;
    grafo[4][4]=0;


    /* stampa la matrice */
    for(int i=0; i<=4; i=i+1)
    {
    for(int j=0; j<=4; j=j+1)
    {
    if( grafo[i][j]==0 )
    {
    System.out.print("[ ]");
    }
    else
    {
    System.out.print("[*]");
    }
    }
    System.out.println("");
    }


    scegliNodo(0,4, grafo);

    }


    public static void scegliNodo (int inizio,int fine, int grafo[][])
    {
    int posizioni_nodo[] = new int[25];
    int ind_posizioni = 0;
    int inizio_utente=inizio;
    boolean trovato=false;
    int contatore=5;

    for(; inizio<5; inizio++){
    for(int j=0; j<5; j=j+1)
    {
    if( grafo[inizio][j] == 1)
    {

    System.out.println("Nella riga "+inizio+" ho trovato un nodo in posizione:");
    System.out.println(+j);
    contatore--;


    if(ind_posizioni<25)
    {
    posizioni_nodo [ind_posizioni] = j;
    ind_posizioni++;


    }

    //System.out.println("inizio " + ind_posizioni);
    if(j==fine && posizioni_nodo [inizio]==fine )
    {
    System.out.println("Dal nodo "+inizio_utente+" e' raggiungibile il nodo "+fine);
    trovato=true;
    break;
    }


    inizio=j;

    if (contatore==5)
    {
    break;
    }



    }




    }//chiudo for interno

    }//chiudo for esterno

    } //chiudo funzione sceglinodo
    } //chiudo il main




    grazie mille

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    76
    le domande che ti ho fatto sono utili per sapere il tipo di soluzione che cerchi

    purtroppo non ho tempo per risolvere l'esercizio, (prometto che se in pausa pranzo mi avanzano 5 min, gli do un'occhiata)

    cmq, se ti può essere utite c'è un certo signor Dijkstra (letto daistrà) che ha fatto qualche studio su questo tipo di problemi, ti posto il link wiki

    http://it.wikipedia.org/wiki/Algoritmo_di_Dijkstra

    puoi fare una ricerca su goolge scrivendo "cammino minimo su grafo"

  8. #8
    Utente di HTML.it L'avatar di izzusan
    Registrato dal
    Apr 2003
    Messaggi
    463
    grazie mille...ora provo a capire e simulare questo tuo link.....se poi hai risultati anche tu ovviamente mi faran piacere!!!

    intanto sbatto un po la testa...
    grazie

  9. #9
    Utente di HTML.it L'avatar di izzusan
    Registrato dal
    Apr 2003
    Messaggi
    463
    Uff ma xke in java ci sono sempre problemi?? in quello ricorsivo c'è' un grosso problema... ke se un nodo torna a quello precedente oppure l'ultimo nodo ripunta al primo va in loop... le ho provate tutte... qualcuno sa dov'e' l'errore??

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.