Как обратиться к процедуре Step - C#

Узнай цену своей работы

Формулировка задачи:

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
        }
         void step(int s, int f, int p);       
       
        private void button1_Click(object sender, EventArgs e)
        {
            int[,] map = new int[10, 10];
            int[] road = new int[10];
            bool[] incl = new bool[10];
            int start, finish, len, c_len;
            bool found;
      //      int p = 2;
            label1.Text=" ";
            for (int i = 1; i < 10; i++)
            {
                for (int j = 1; j < 10; j++)
                {
                    if (dataGridView1.Rows[i].Cells[j].Value != null)
                    {
                        map[i, j] = Convert.ToInt16(dataGridView1.Rows[i].Cells[j].Value);
                    }
                    else map[i, j] = 0;
 
                }
 
            }
            start = Convert.ToInt16(textBox2.Text);
            finish = Convert.ToInt16(textBox3.Text);
            road[1] = start;
            incl[start] = true;
            step(start,finish,2);
            if (!found) {label1.Text ="указанные точки не соединены!";}
 
        }
   void step(int s, int f, int p)
         {
            int[,] map = new int[10, 10];
            int[] road = new int[10];
            bool[] incl = new bool[10];
            int start, finish, len, c_len;
            bool found;
            len = 0;
            c_len = 0;
            if (s == f)
            {
                len = c_len;
                found=true;
                for (int i = 1; i < p - 1; i++)
                {
                    label1.Text = label1.Text + ' ' + Convert.ToInt16(road[i]);
                    label1.Text = label1.Text + " , длина: " + Convert.ToInt16(len);
                }
            }
            else
            {
                for (int c = 1; c < 10; c++)
                {
                    if ((map[s, c] != 0) && (!incl[c]) && ((len == 0) || (c_len + map[s, c] < len)))
                    {
                        road[p] = c;
                        incl[c] = true;
                        c_len = c_len + map[s, c];
                        step(c, f, p + 1);
                        incl[c] = false;
                        road[p] = 0;
                        c_len = c_len - map[s, c];
 
                    }
                }
            }
        }
    }

Решение задачи: «Как обратиться к процедуре Step»

textual
Листинг программы
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        public void button1_Click(object sender, EventArgs e)
        {
            int[,] map = new int[10, 10]; // карта
            int[] road = new int[10];     //дорога - номера точек карты
            bool[] incl = new bool[10];   // равен true если точка с номером i включена в road
            int start, finish;          // начальная и конечная точки
            bool found;
            int len, c_len;  // длина найденного(минимального) маршрута и текущего(формируемого)
            found = true;
            len = 0;  // длина найденного(минимального) маршрута
            c_len = 0; // длина текущего маршрута
            label1.Text = " ";
            // ввод описания карты из таблицы
            for (int i = 1; i < 10; i++)
            {
                for (int j = 1; j < 10; j++)
                {
                    if (dataGridView1.Rows[i].Cells[j].Value != null)
                    {
                        map[i, j] = Convert.ToInt16(dataGridView1.Rows[i].Cells[j].Value);
                    }
                    else map[i, j] = 0;
 
                }
 
            }
            start = Convert.ToInt16(textBox2.Text);
            finish = Convert.ToInt16(textBox3.Text);
            road[1] = start; // внесём точку в маршрут
            incl[start] = true; // пометим её как включенную
            step(start, finish, 2,label1); // ищем вторую точку маршрута
            if (!found) { label1.Text = "указанные точки не соединены!"; } // проверяем, найден ли хоть один путь
        }
        // выбор очередной точки
        static void step(int s, int f, int p,Label l)
        {
            int[,] map = new int[10, 10];
            int[] road = new int[10];
            bool[] incl = new bool[10];
            int start, finish, len, c_len;
            bool found;
            
            if (s == f)
            {
                len = c_len; // сохраняем длину найденного маршрута
                found = true;
                // вывод найденного маршрута
                for (int i = 1; i < p - 1; i++)
                {
                    l.Text = l.Text + ' ' + Convert.ToInt16(road[i]);
                    l.Text = l.Text + " , длина: " + Convert.ToInt16(len);
                }
            }
            else
                // выбираем очередную точку
            {
                for (int c = 1; c < 10; c++) // проверяем все вершины
                {
                    if ((map[s, c] != 0) && (!incl[c]) && ((len == 0) || (c_len + map[s, c] < len))) //точка соединена с текущей, но не включена в маррут
                    {
                        road[p] = c; // добавим вершину в путь
                        incl[c] = true; // пометим вершину как включённую
                        c_len = c_len + map[s, c];
                        step(c, f, p + 1,l);
                        incl[c] = false;
                        road[p] = 0;
                        c_len = c_len - map[s, c];
                    }
                }
            }
        }
    }
}

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы