Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Windows Forms
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2016, 21:22   #1
4ubak01
Новичок
Джуниор
 
Регистрация: 21.04.2016
Сообщений: 1
По умолчанию Динамическое программирование

Здравствуйте помогите есть ли у кого нибудь программа о решение задач про рюкзак на форме c# или дельфи нашел один код но не могу его поставить на форму помогите пожалуйста
Код:
public static int maxCost = 0; 
        public static int MaxWeight = 0; 
        public static int n = 0;  
        public static string strTable, symstr; 
        public static int count;
        table Form1 = new Table();
        private void button1_Click(object sender, EventArgs e)
        {
            if (restrictionmas.Text == "" || restrictionmas.Text == "0")  // Проверка ввода
            {
                MessageBox.Show("Введите ограничение веса!");
                return;
            }
            if (dataBox.Text == "") 
            {
                MessageBox.Show("Введите предметы!");
                return;
            }
        MaxWeight = Convert.ToInt32(restrictionmas.Text);
        count = 0;
        string t = dataBox.Text.Trim();
        string strName = "";
        int p = 1; bool w=false;
        for (int i = 0; i < t.Length; i++)
        {
            if (t[i] == '"')
            {
                p += 1;
                w = true;
            }
            if (p % 2 == 0 || w)
            {
                strName += t[i];
            }
            if (w && p % 2 != 0)
                strName += "\n";
            w = false;          
        }
        string[] masName = strName.Split('\n');
        string[] str = t.Split(',', '\n');
        int b = 0;
        n = masName.Length;
        int[] c = new int[n];
        int[] m = new int[n];
        int[] a = new int[n];
        for (int j = 0; j < str.Length && b+1 <= n; j++)
        {
            c[b] = Convert.ToInt32(str[j + 1]);
            m[b] = Convert.ToInt32(str[j + 2]);
            j = j + 2;
            b++;
        }
        search(0, a, c, m, MaxWeight, 0, 0);
        if (strTable == null) { MessageBox.Show("Вес всех предметов больше ограничения!"); return; }
        string[] strstrTable = strTable.Split('\n');
        result.Text = Convert.ToString(maxCost);
        maxCost = 0;
        form.Hide();
        form.grid.DataSource = null;
        form.grid.ColumnCount = n;        
        for (int i = 0; i < n; i++)
        {
            form.grid.Columns[i].HeaderText = masName[i];
        }
        string[] massym = symstr.Split(' ');
        form.grid.RowHeadersWidth = 120;       
        for (int i = 0; i < count; i++)
        {
            form.grid.Rows.Add();
            resultBox.Clear();
            form.grid.Rows[i].HeaderCell.Value = massym[i];
            string buf = strstrTable[i];
            for (int j = 0; j < form.grid.Columns.Count-1; j++)
            {
                form.grid.Rows[i].Cells[j].Value = buf.Substring(j, 1);
                if (buf.Substring(j, 1) == "1")
                    resultBox.Text += masName[j] + "\n";
            }
        }
        strTable = "";
        butTable.Enabled = true;
    }
      static void search(int k, int[] a, int[] c, int[] m, int maxWeight, int currentWeight, int currentCost)
        {
            if (k >= n)
            {
                if (maxCost < currentCost && maxWeight >= currentWeight)
                {
                    maxCost = currentCost;
                    symstr += Convert.ToString(maxCost) + ' '; 
                    output(a);
                }
            }
            else
            {    
                if (currentWeight + m[k] <= maxWeight)      
                {
                    a[k] = 1;
                    search(k + 1, a, c, m, maxWeight, currentWeight + m[k], currentCost + c[k]);
                }
                a[k] = 0;
                search(k + 1, a, c, m, maxWeight, currentWeight, currentCost);
            }
        }     
        static void output(int[] a)
        {
            for (int i = 0; i < n; i++)
            {
              strTable +=Convert.ToString(a[i]);
            }
            strTable += "\n";
            count++;
        }
       private void ОткрытьToolStripMenuItem_Click(object sender, EventArgs e)
       {
            if (openFileDialog1.ShowDialog() == DialogResult.OK) 
            {
                string s = openFileDialog1.FileName; 
                StreamReader sr = new StreamReader(s);
                char f = sr.ReadToEnd()[0]; sr.Close();
                if (f == '?')
                {
                    StreamReader r = new StreamReader(s);
                    count = 0;
                    dataBox.Text = r.ReadToEnd();
                  
                    string t = dataBox.Text.Trim();
                    int ind = t.IndexOf(' ');
                    restrictionmas.Text = t.Substring(1, ind - 1);
                    int tri = ind--;
                    ind++;
                    t = t.Substring(ind, t.Length - tri);
                    dataBox.Text = t.Trim();
                    r.Close();
                 
                }
                else MessageBox.Show("Неверный формат данных!");
             
            }
       
       }
       private void сохранитьToolStripMenuItem_Click(object sender, EventArgs e)
       {
           if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                /
                StreamWriter sw = new StreamWriter(saveFileDialog1.FileName);
                
                sw.WriteLine("?" + restrictionmas.Text + " " + dataBox.Text);         
                sw.Close();    
            }

       }
 
       
       private void оПрограммеРюкзакToolStripMenuItem_Click(object sender, EventArgs e)
       {
 
           About form = new About();
           form.Show();
          
       }
       private void выходToolStripMenuItem_Click(object sender, EventArgs e)
       {
           Form.ActiveForm.Close();
       }
 
 
       private void restrictionmas_KeyPress(object sender, KeyPressEventArgs e)
       {
           if ((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8)
               e.Handled = true;
       }
      
       private void Clear_Click(object sender, EventArgs e)
       {
           dataBox.Clear();
           resultBox.Clear();
           restrictionmas.Clear();
           result.Text="";
           butTable.Enabled = false;
       }
        
       private void Insert_Click(object sender, EventArgs e)
       {
           dataBox.Clear();
           Insert form = new Insert();
           form.Owner = this;
           form.ShowDialog();
           count = 0;
       }
       private void сохранитьРезультатToolStripMenuItem_Click(object sender, EventArgs e)
       {
           if (saveFileDialog1.ShowDialog() == DialogResult.OK)
           {
               StreamWriter sw = new StreamWriter(saveFileDialog1.FileName);

               sw.WriteLine(resultBox.Text);
             
               sw.Close();     
           }
       }
       private void помощьToolStripMenuItem_Click(object sender, EventArgs e)
       {
           Help form = new Help();
           form.Owner = this;
           form.ShowDialog();
       }
       private void открытьРезультатToolStripMenuItem_Click(object sender, EventArgs e)
       {
         
           if (openFileDialog1.ShowDialog() == DialogResult.OK)
           {
              
               string s = openFileDialog1.FileName;
      
               StreamReader sr = new StreamReader(s);
              
               resultBox.Text = sr.ReadToEnd();
               sr.Close();    
           }
       }
 
       private void butExit_Click(object sender, EventArgs e)
       {
            Form1.ActiveForm.Close();
       }
 
       private void butTable_Click(object sender, EventArgs e)
       {
           form.ShowDialog();
       }
4ubak01 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое программирование Daniiil Visual C++ 6 10.01.2016 12:48
Динамическое программирование Obey177 Помощь студентам 8 21.04.2015 18:03
Динамическое программирование GoldSieg Паскаль, Turbo Pascal, PascalABC.NET 0 12.04.2012 16:35
Динамическое программирование Daniya.ru Общие вопросы .NET 2 19.12.2010 11:40
Динамическое программирование. MAKEDON Помощь студентам 6 26.08.2009 14:10