Készíts generikus osztályt irányított gráfok reprezentálására! A generikus paraméter a csúcsok típusa legyen. A datastructures.Digraph osztály addNode metódusa egy új (izolált) csúcsot vesz fel a gráfba. Ha a paraméterként kapott csúcs már benne van a gráfban, váltson ki datastructures.GraphException kivételt. Az addEdge két csúcsot kap paraméterként: ha ezek a csúcsok még nem voltak benne a gráfban, akkor bekerülnek. A két csúcs között behúzásra kerül egy irányított él. A hasEdge metódus pontosan akkor térjen vissza igaz értékkel, ha a paraméterként kapott két csúcs között van irányított él a gráfban; minden más esetben hamisat adjon vissza. A gráf ábrázolása úgy történjen, hogy egy leképezésben (java.util.Map) tároljuk egy csúcshoz azt a halmazt, amiben a csúcsból kiinduló élek végpontjai vannak. A leképezés kulcshalmaza ezek szerint a gráf csúcshalmazával egyenlő. A főprogram tesztelje a gráf működését: hozzon létre egy String csúcstípusú gráfot, töltse fel néhány éllel, majd a parancssori argumentumokkal tesztelje, hogy mely egymás utáni párok alkotnak élt a gráfban. Készíts osztályt, mely segítségével egy adatbázisban tárolt gráfba tudsz éleket felvenni, illetve lekérdezni, hogy két csúcs között van-e irányított él. Az adatbázisban egy táblában azt tároljuk, hogy melyik városból melyik városba vezet él (a városnevek szövegek legyenek). Készíts web-es lekérdező felületet az előző adatbázisos programhoz. Készíts az első feladatban adott osztályhoz egy leszármazottat: az irányítatlan gráf típust. Ez annyiban speciálisabb, mint az irányított gráf, hogy ha van egy él A-ból B-be, akkor automatikusan van él B-ből A-ba is. Valósítsd meg a datastructures.Graph generikus osztályt úgy, hogy nem tárolod a B-ből A-ba vezető élet, csak az A-ból B-be vezetőt! Valósítsd meg az elérhetőségvizsgálat műveletet az irányított gráf típusban. (Az A-ból elérhető a B, ha van irányított út A-ból B-be.) Készíts a segítségével olyan web-es lekérdező felületet, amellyel megtudható, hogy az adatbázisban tárolt gráfban két csúcs között van-e út.