コード例 #1
0
        public bool IsConntected(List <Nodo> grafoDaControllare)
        {
            var ritornato = Algoritmi.Bfs(this.Id, grafoDaControllare);

            ritornato = ritornato.Where(x => x.Id != this.Id).ToList();
            foreach (var nodo in ritornato)
            {
                if (nodo.distanza == -1)
                {
                    return(false);
                }
            }
            return(true);
        }
コード例 #2
0
        public int PrintEvenDistance(List <Nodo> grafoDaControllare)
        {
            var ritornato = Algoritmi.Bfs(this.Id, grafoDaControllare);

            ritornato = ritornato.Where(x => x.Id != this.Id).ToList();
            int i = 0;

            foreach (var r in ritornato)
            {
                if (r.distanza != -1 && r.distanza % 2 == 0)
                {
                    i++;
                }
            }
            return(i);
        }
コード例 #3
0
        static void Main(string[] args)
        {
            #region  GenerazioneCasualeNodi

            Random r = new Random();
            //int quantiNodi = r.Next(4, 6);
            //List<Nodo> daUtilizzare = new List<Nodo>(quantiNodi);
            //for (int i = 0; i < quantiNodi; i++)
            //{
            //    daUtilizzare.Add(new Nodo(i));
            //}
            //List<Nodo> Collegati = new List<Nodo>(quantiNodi);
            //foreach (var n in daUtilizzare)
            //{
            //    foreach (var nn in daUtilizzare.Where(x => x.Id != n.Id))
            //    {
            //        if (r.Next(0, 3) >= 2)
            //        {
            //            if (!n.Connessioni.Contains(nn))
            //                n.Connessioni.Add(nn);
            //            if (!nn.Connessioni.Contains(n))
            //                nn.Connessioni.Add(n);
            //        }
            //    }
            //    Collegati.Add(n);
            //}


            #endregion

            #region GenerazioneNonCasuale
            //Grafo pagina 460
            int         quantiNodi   = 6;
            List <Nodo> daUtilizzare = new List <Nodo>(quantiNodi);
            for (int i = 0; i < quantiNodi; i++)
            {
                daUtilizzare.Add(new Nodo(i));
            }
            List <Nodo> Collegati = new List <Nodo>(quantiNodi);

            //NODO u
            daUtilizzare[0].Connessioni.Add(daUtilizzare[1]);
            daUtilizzare[0].Connessioni.Add(daUtilizzare[2]);
            daUtilizzare[0].lettera = 'u';
            //NODO v
            daUtilizzare[1].Connessioni.Add(daUtilizzare[3]);
            daUtilizzare[1].lettera = 'v';
            //NODO x
            daUtilizzare[2].Connessioni.Add(daUtilizzare[1]);
            daUtilizzare[2].lettera = 'x';
            //NODO y
            daUtilizzare[3].Connessioni.Add(daUtilizzare[2]);
            daUtilizzare[3].lettera = 'y';
            //NODO w
            daUtilizzare[4].Connessioni.Add(daUtilizzare[3]);
            daUtilizzare[4].Connessioni.Add(daUtilizzare[5]);
            daUtilizzare[4].lettera = 'w';
            //NODO z
            daUtilizzare[5].Connessioni.Add(daUtilizzare[5]);
            daUtilizzare[5].lettera = 'z';
            #endregion

            Collegati = daUtilizzare;
            #region ChiamaBFS

            var start     = r.Next(0, quantiNodi);
            var ritornato = Algoritmi.Bfs(start, Collegati);

            #endregion

            #region ChiamaDFS

            var ritornatoDFS = Algoritmi.Dfs(daUtilizzare);

            #endregion

            #region CountReachable

            Console.WriteLine("#############CONTA RAGGIUNGIBILI##########");
            foreach (var nodo in daUtilizzare)
            {
                Console.WriteLine("Nodo #" + nodo.Id + " - Nodi raggiungibili:\t" + nodo.CountReachable(daUtilizzare));
            }
            Console.WriteLine("#############FINE CONTA RAGGIUNGIBILI##########\n\n");
            #endregion

            #region CountEvenDistance
            Console.WriteLine("#############CONTA RAGGIUNGIBILI PARI##########");

            foreach (var nodo in daUtilizzare)
            {
                Console.WriteLine("Nodo #" + nodo.Id + " - Nodi pari raggiungibili:\t" + nodo.PrintEvenDistance(daUtilizzare));
            }
            Console.WriteLine("#############FINE CONTA RAGGIUNGIBILI PARI##########\n\n");
            #endregion

            Console.WriteLine("#############GRAFO CONNESSO##########");

            foreach (var nodo in daUtilizzare)
            {
                Console.WriteLine("Nodo #" + nodo.Id + " - Grafo connesso:\t" + nodo.IsConntected(daUtilizzare));
            }
            Console.WriteLine("#############FINE GRAFO CONNESSO##########\n\n");

            Console.WriteLine("#############GRAFO ALBERO##########");

            Console.WriteLine("Grafo albero:\t" + Algoritmi.IsTree(daUtilizzare));

            Console.WriteLine("#############FINE GRAFO ALBERO##########\n\n");
            #region BloccaDEBUG

            Algoritmi.PrintEdgeType(daUtilizzare);
            int k = 0;
            k++;

            #endregion
        }