Bypassing in depth (végrehajtás a Java-on)

A csúcsokból és élekből álló, irányítatlan grafikát adunk meg. A kezdeti gráfot a szélek listája adja meg. Szükséges, hogy a gráf minden csúcsából mélyen átkerüljenek, még nem látogattak el a számuk növelése érdekében.
Abból a célból, a bypass mélységben eredeti gráf kényelmes, hogy képviselje a számítógép memóriájában egy listát a szomszédsági, tárolása minden vertex listája csúcsok mellett is. A Boolean tömb arra szolgál, hogy jelezze, hogy a legmagasabban a legmagasabb a mélyben, vagy még nem. Ebben az esetben, ha, akkor a tetejét meglátogatják, ha nem, akkor.


ArrayList adj []; // a szomszédságok listája
Boolean használt []; // tömb arra, hogy tárolja az átadott és nem telt csúcsokkal kapcsolatos információkat

Mint egy szomszédsági lista a grafikon ábrázolásához a Java nyelven, célszerű olyan tömböt használni, amelynek minden eleme egy adatszerkezet.
A következő megvalósítás során az adatokat leolvassák és kiadják a konzolnak.

Az első bemeneti vonal van beállítva, hogy két egész: - a csúcsok száma a gráfban, és - a bordák száma, ill. Minden sor írja le szélei grafikon - két egész a hatótávolsága - az összes számot a bordák.

A kimeneti fájl sorában a grafikon csúcsai a keresztirányban a mélységben jelennek meg, az első csúcstól kezdve.


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;

nyilvános osztályú megoldás

magán int n; // a csúcsok száma a digraphban
magán int m; // az ívek száma a digraphban
privát ArrayList adj []; // a szomszédságok listája
privát logikai használt []; // tömb arra, hogy tárolja az átadott és nem telt csúcsokkal kapcsolatos információkat

privát BufferedReader cin;
saját PrintWriter cout;
saját StringTokenizer tokenizer ;;

// eljárás mélyen elmozdulásra
privát void dfs (int v) // ha a csúcsot áthaladják, nem kezdeményezzünk eljáráshívást
ha (használt [v]) visszatér;
>
használt [v] = igaz; // jelöljük ki a csúcsot
cout.print ((v + 1) + "");
/ / futtassa a keresztezést a v csúcs melletti csúcsokból
az (int i = 0; i ();
>

// olvassa el az élek listáján megadott gráfot
az (int i = 0; i

Tekintsük az algoritmus munkáját a mélységben való áthaladásra a bal oldali ábrán látható grafikonon. Miután az algoritmus futott, a jobb oldali ábrán látható, mélységű bypass mélysége az eredeti grafikonra épül.

Bypassing in depth (végrehajtás a Java-on)

Kapcsolódó cikkek