예제 #1
0
        private void OptimalResultSequencesCalculation(AlgoritmModel algModel)
        {
            algModel.SequenceDaDbDc = CalculateDSequence(algModel.MatrixDic);
            algModel.OptimalResultElementsFromSequence = GetOptimalValuesFromDSequence(algModel.SequenceDaDbDc);

            foreach (var optimalElement in algModel.OptimalResultElementsFromSequence)
            {
                algModel.OptimalSequence.Add(optimalElement.Key);

                var newAlgModel = new AlgoritmModel()
                {
                    OptimalSequence = new List <string>(), MatrixDic = new Dictionary <string, List <int> >(), OptimalSequencesResult = new List <List <string> >()
                };
                if (algModel.InnerAlgoritmModel == null)
                {
                    algModel.InnerAlgoritmModel = new List <AlgoritmModel>();
                }
                newAlgModel.OptimalSequencesResult.Add(algModel.OptimalSequence);
                newAlgModel.MatrixDic = GetTempMatrixDic(algModel.MatrixDic);
                newAlgModel.MatrixDic.Remove(optimalElement.Key);
                newAlgModel.OptimalSequence = GetTempOptimalSequence(algModel.OptimalSequence);

                if (newAlgModel.MatrixDic.Count == 0)
                {
                    _optimalSequencesResult.Add(newAlgModel.OptimalSequence);
                    return;
                }

                algModel.InnerAlgoritmModel.Add(newAlgModel);
                OptimalResultSequencesCalculation(algModel.InnerAlgoritmModel.Last());
                algModel.OptimalSequence.Remove(algModel.OptimalSequence.Last());
            }
        }
예제 #2
0
        public Tuple <AlgoritmModel, List <List <string> > > GetOptimalResultSequences()
        {
            var optimalSequence = new List <string>();
            var matrixDic       = GetTempMatrixDic(_mainMatrixDic);

            _rootModel = new AlgoritmModel()
            {
                OptimalSequence = optimalSequence, MatrixDic = matrixDic
            };
            OptimalResultSequencesCalculation(_rootModel);
            return(Tuple.Create(_rootModel, _optimalSequencesResult));
        }