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);*/ }
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); } }