NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Graf - jednosměrka/dvousměrka && duplikáty

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Jiří Hrdina:13.2.2018 22:23

Ahoj,
prosím o radu. Sepsal jsem matici sousednosti a mým cílem ted je, aby se vypsaly všechny jednosměrky a dvousměrky... Kod mi celkem funguje, čili mi vypíše, co potřebuji, ale u dvousměrek mi vyskakují duplikáty a nevím, jak se jich zbavit...

Mockrát díky :)

Output je:
One way:
0->1
1->2
3->4
4->2
4->5
Two Way
0->7
2->3
3->2
5->6
6->5
6->7
7->0
7->6

  public static void main(String[] args) {
        int[][] matr = {
            {0,1,0,0,0,0,0,1},
            {0,0,1,0,0,0,0,0},
            {0,0,0,1,0,0,0,0},
            {0,0,1,0,1,0,0,0},
            {0,0,1,0,0,1,0,0},
            {0,0,0,0,0,0,1,0},
            {0,0,0,0,0,1,0,1},
            {1,0,0,0,0,0,1,0}
        };

        checkMatrix(matr);


        }


    public static void checkMatrix(int mat[][]){
        ArrayList<Uzel> list = new ArrayList<>();
        ArrayList<Uzel> list2 = new ArrayList<>();
        for(int i=0; i < mat.length; i++){
            for(int j=0; j<mat[i].length;j++){
                Uzel uzel = new Uzel(i, j);
                if(mat[i][j] != 0 && mat[i][j] != mat[j][i]){
                    if(!list.contains(new Uzel(j, i))){
                        list.add(uzel);
                    }
                }
                else if(mat[i][j] != 0 && mat[i][j] == mat[j][i]){
                        Uzel uzel2 = new Uzel(j, i);
                        if(!list2.contains(uzel2)){
                            list2.add(uzel);
                        }

            }
        }
    }
        System.out.println("One way: ");
        readList(list);

        System.out.println("Two Way");
        readList(list2);
    }

    public static void readList(ArrayList<Uzel>list){
        for(Uzel s : list){
            System.out.println(s.getStart() + "->" + s.getEnd());
        }
    }
    }

class Uzel {
    int start;
    int end;


    public Uzel(int start, int end) {
        this.start = start;
        this.end = end;
    }

    public int getStart() {
        return start;
    }


    public int getEnd() {
        return end;
    }
 
Odpovědět
13.2.2018 22:23
Avatar
Odpovídá na Jiří Hrdina
Patrik Valkovič:13.2.2018 22:49

Pro dvousměrné ti stačí procházet jen půlku matice, tzn j nepůjde od nuly, aly od j. A tu podmínky if !contains můžeš smazat, protože se pokaždé volají na jiný objekt a tak vždy budou true.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
13.2.2018 22:49
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Jiří Hrdina:13.2.2018 22:55

Mockrát děkuji, již funguje perfektně :-)

 
Nahoru Odpovědět
13.2.2018 22:55
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.