Datová struktura - vícevrstvý graf – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Datová struktura - vícevrstvý graf – Java – Fórum – Programujte.comDatová struktura - vícevrstvý graf – Java – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
farth0
Newbie
27. 6. 2017   #1
-
0
-

Zdravím,

programuju aplikaci, která zobrazuje různé body (města) na mapě a spojení mezi nimi. Napsal jsem si datovou strukturu graf (Vrchol - město,  Hrana - cesta). Mapa je rozdělená na čtyři vrstvy dle podrobnosti - podle velikosti města. A teď otázka - existuje nějaká vhodná struktura, něco jako vícevrstvý graf, která by byla schopná uchovavat všechny vrstvy grafu? Zatím to řeším tak, že pro každou vrstvu mám jinou instanci grafu, ale napříč vrstvami se blbě vyhledává.

Nahlásit jako SPAM
IP: 77.236.206.–
P
~ Anonymní uživatel
212 příspěvků
28. 6. 2017   #2
-
0
-

Zavedl bych entitu Vrstva a vazbu M:N mezi Vrstva a Vrchol. Kdyz budes zobrazovat urcitou vrstvu, tak se zobrazi jenom mesta (vrcholy), ktere jsou prirazene k dane vrstve, a zobrazi se jen hrany (cesty), u kterych oba vrcholy jsou prirazene k dane vrstve. Hrana je prirazena k vrcholum bez ohledu na vrstvu, takze je mozne vyhledavat, vrstvy jsou pouze pro zobrazeni.

Nahlásit jako SPAM
IP: 212.47.6.–
farth0
Newbie
28. 6. 2017   #3
-
0
-

Možná jsem to nenapsal úplně šťastně, každá nižžší vrstva obsahuje vrcholy z vrstvy předchozí, ale má jiné hrany. Potřebuju aby hrany i vrcholy byly odděleny ve vrstvách a dalo se vyhledávat napříč vrtsvami. Ilustrace jak by to mělo vypadat.

Připojen obrázek.

Základní kostra třídy grafu

public class Graph<V, E, K> {

    private final HashMap<K, Vertex> vertices;

    public Graph() {
        this.vertices = new HashMap<>();
    }

    private class Vertex {
        private V data;
        private K key;
        private ArrayList<Edge> vertexEdges;

        public Vertex(V data) {
            this.data = data;
            vertexEdges = new ArrayList<>();
        }
   }
    private class Edge {

        private E data;
        private Vertex vertex1;
        private Vertex vertex2;

        public Edge(K keyVertex1, K keyVertex2, E data) {
            this.data = data;
            this.vertex1 = vertices.get(keyVertex1);
            this.vertex2 = vertices.get(keyVertex2);
            vertex1.vertexEdges.add(this);
            vertex2.vertexEdges.add(this);
        }
    }

    public void addVertex(K key, V data) {
	//...
    }

    public void addEdge(K keyVertex1, K keyVertex2, E data){
	//...
    }

}
Nahlásit jako SPAM
IP: 77.236.206.–
P
~ Anonymní uživatel
212 příspěvků
29. 6. 2017   #4
-
0
-

#3 farth

každá nižžší vrstva obsahuje vrcholy z vrstvy předchozí, ale má jiné hrany. Potřebuju aby hrany i vrcholy byly odděleny ve vrstvách a dalo se vyhledávat napříč vrtsvami

Proc na tom takto trvas? Vrcholy a hrany jsou dane bez ohledu na vrstvu. Tedy existuji vrcholy A, B a hrana AB. Dale existuje vrchol, ktery ve vrstve 2 lezi mezi vrcholy A a B - rekneme vrchol X - a hrany AX, XB. A pak existuje prirazeni vrcholu a hran vrstvam. Takze existuje prirazeni A1, A2, B1, B2, X2, AB1, AX2, XB2. Ve vrstve se zobrazi vse co je k ni prirazeno. Nevim co presne myslis vyhledavanim mezi vrstvami, ale tento model to podle mne umozni - bud chci vrcholy a hrany v jedne vrstve, ve vrstve a ve vsech nizsich vrstvach, nebo bez ohledu na vrstvu. 

Nahlásit jako SPAM
IP: 212.47.6.–
MilanL+1
Grafoman
29. 6. 2017   #5
-
0
-

#3 farth
no já bych to udělal jako P s tím, že vrstvy by byly jak u vrcholů tak i u hran, vrcholy budeš zobrazovat všechny, které spadají do vybrané a (nad/pod)řazené vrstvy a hrany jen z konkrétní vrstvy.

Nahlásit jako SPAM
IP: 91.139.9.–
MilanL+1
Grafoman
29. 6. 2017   #6
-
0
-

#5 MilanL
ještě bych to zjednodušil na společného předka pro vrcholy i hrany. U hrany ti stačí 1 vertex ve kterém budou indexy vrcholů, pak při zobrazení stačí procházet hrany dané vrstvy a k nim pak zobrazovat potřebné vrcholy.

Pro zobrazování, tak jak to chceš použít, mají ve vrstvách větší váhu hrany než vrcholy.

Nahlásit jako SPAM
IP: 91.139.9.–
farth0
Newbie
3. 7. 2017   #7
-
0
-

Jo s další vnitřní třídou "Vrstva" mi to funguje, nejdřív mi to nebylo úplně jasný jak to myslíte , ale je to vlastně v celku jednoduchý. Díky moc.

Nahlásit jako SPAM
IP: 77.236.206.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 56 hostů

Podobná vlákna

Datova struktura - slovnik — založil BigBear

Graf — založil bbeni

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý