Salve, sto preparando in questi giorni Algoritmi e strutture dati. Sto avendo dei dubbi se la parte che ho scritto sia corretta oppure no. Allego la traccia e lo svolgimento(Non ho fatto tutti i metodi ancora).

Un’agenzia governativa sanitaria vuole realizzare un sistema che permetta di studiare la possibile diffusione di una malattia contagiosa in un insieme di persone sotto osservazione. Il contagio può avvenire solo in presenza di contatti diretti tra le persone e, per via dell’incubazione, anche persone apparentemente sane possono contagiare altre persone. Le persone sono individuate univocamente dal loro codice fiscale, e sono caratterizzate da nome, cognome, età, genere, anamnesi. L’anamnesi di una persona è una lista di patologie che si sono presentate nel passato nella storia di questa. Il sistema deve rappresentare i contatti diretti che sono avvenuti tra le persone distinguendo se vi è stato un unico contatto, molteplici contatti o nessuno.
Si rappresenti la situazione sopra descritta, supposta a regime (il candidato non si deve occupare quindi dell’inizializzazione). Il candidato deve, inoltre, implementare i seguenti metodi e valutarne la complessità computazionale:
1) metodo m1 (inserisci contatto), che riceve due persone e incrementa di uno il numero di contatti diretti avvenuti tra queste persone.
2) metodo m2 (possibile contagio), che riceve due persone A e B e restituisce vero se è possibile che, anche per via indiretta e cioè attraverso altre persone, è possibile che B sia stata contagiata da A (supposta affetta dalla malattia).
3) metodo m3 (contatti diretti) che riceve una persona A e il nome di una patologia P e restituisce la lista delle persone che hanno avuto contatti diretti con A e che hanno P nella loro anamnesi.
4) metodo m4 (max_contatti_multipli) che riceve due persone A e B e restituisce una sequenza di persone che costituiscono un percorso di contatti diretti tra A e B che massimizzi i contatti molteplici. Per esempio, se tra A e B esistono solo due percorsi, il primo costituito da <A,C,B> il secondo da <A,D,B>, e si suppone che tra A e C, tra C e B e tra D e B ci sia stato un unico contatto, mentre tra A e D ci sono stati molteplici contatti, allora il metodo dovrebbe restituire il percorso <A,D,B> che include 1 contatto multiplo mentre il percorso <A,C,B> non ne include alcuno.


Lo svolgimento:
codice:
public class Persona {    
    private String id;
    private String nome;
    private String cognome;
    private int eta;
    private boolean genere;
    private LinkedList<Anamnesi> malattiePregresse;
    
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getCognome() {
        return cognome;
    }
    public void setCognome(String cognome) {
        this.cognome = cognome;
    }
    public int getEta() {
        return eta;
    }
    public void setEta(int eta) {
        this.eta = eta;
    }
    public boolean isGenere() {
        return genere;
    }
    public void setGenere(boolean genere) {
        this.genere = genere;
    }
    public LinkedList<Anamnesi> getMalattiePregresse() {
        return malattiePregresse;
    }
    public void setMalattiePregresse(LinkedList<Anamnesi> malattiePregresse) {
        this.malattiePregresse = malattiePregresse;
    }
}
Parte dei metodi:
codice:
public class Rete {


    private DirecterSparseGraph<Persona> g;
    
    public Rete() {
        g = new DirectedSparseGraph<Persona>();


    }
public boolean m2(Persona a, Persona B) {
         boolean esito = false;
         if(g.findEdge(a,b) && g.existsPath(a,b)) {
             esito = true;
         }
         return esito;
     }
     public LinkedList<Persona> m3(Persona a, Patologia b){
         LinkedList<Persona> list = new LinkedList<Persona>();
         for(Persona b : g.getAdjacents(a)) {
             if(b.getMalattiePregresse().equals(b)&& g.findEdge(a,b)) {
                 list.add(b);
             }