예제 #1
0
        public void addNeighbor(NeuronExt neuron)
        {
            /*if (neighbors!=null)
             * {*/
            if (neighbors.Exists(x => x.neuron.getId() == neuron.neuron.getId()) == false)
            {
                neighbors.Add(neuron);
            }

            /*}
             * else neighbors.Add(neuron);*/
        }
예제 #2
0
 public bool isConnective(Neuron[] listOfNeurons)
 {
     if (listOfNeurons.Length > 0)
     {
         // формируем неориентированный граф связности
         NeuronExt[] listOfExtNeurons = new NeuronExt[listOfNeurons.Length];
         // формируем список Ext-нейронов
         for (int i = 0; i < listOfNeurons.Length; i++)
         {
             listOfExtNeurons[i] = new NeuronExt(listOfNeurons[i]);
         }
         // добавляем соседей по входам и замыкаем на выходы
         for (int i = 0; i < listOfNeurons.Length; i++)
         {
             // добавили самого себя ?
             //listOfExtNeurons[i].addNeighbor(listOfExtNeurons[i]);
             // добавляем соседей
             foreach (Neuron nn in listOfExtNeurons[i].neuron.getNeighbors())
             {
                 //listOfExtNeurons[i].addNeighbor(nn);
                 // добавляем соседям текущий нейрон как соседа
                 for (int k = 0; k < listOfNeurons.Length; k++)
                 {
                     if (listOfExtNeurons[k].neuron.getId() == nn.getId())
                     {
                         listOfExtNeurons[k].addNeighbor(listOfExtNeurons[i]);
                         listOfExtNeurons[i].addNeighbor(listOfExtNeurons[k]);
                     }
                 }
             }
         }
         // проверяем связность графа
         List <NeuronExt> isMarked = new List <NeuronExt>();
         List <NeuronExt> queue    = new List <NeuronExt>();
         queue.Add(listOfExtNeurons[0]);
         bool itIsConnective = false;
         while (queue.Count > 0)
         {
             // берем первый нейрон в очереди
             NeuronExt tekN = queue.First <NeuronExt>();
             queue.Remove(tekN);
             // помечаем его
             isMarked.Add(tekN);
             if (isMarked.Count == listOfNeurons.Length) // всё, связный
             {
                 itIsConnective = true;
                 break;
             }
             // добавляем в очередь всех его непомеченных соседей
             foreach (NeuronExt neur in tekN.neighbors)
             {
                 if ((queue.Exists(x => x.neuron.getId() == neur.neuron.getId()) == false) &&
                     (isMarked.Exists(x => x.neuron.getId() == neur.neuron.getId()) == false))
                 {
                     queue.Add(neur);
                 }
             }
         }
         return(itIsConnective);
     }
     else
     {
         return(false);
     }
 }