Ошибка: "Индекс за пределами диапазона" - C# (178307)

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

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

Пишу программу по алгоритму Куна(максимального паросочетания) и на строке adj[i].GetLowerBound(j); выводит ощибку: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. Помогите разобраться Могу представить код
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace _21_февраля
{
    public partial class Form1 : Form
    {
        int N, M, mtSize=0, m=0;
        List<bool> used = new List<bool>();
        List<int> mt = new List<int>();
        List<Array> adj = new List<Array>();
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
                     
        private bool kuhn(int v)
        {
            if (used[v])
            {
                return false;
            }
            used[v] = true;
            int[,] A;
            int L = adj[v].GetLength(v);
            A = new int[L, L];
            for (int i = 0; i < adj[v].GetLength(v); ++i)
            {
                int w = A[v,i];
                if (mt[w] == -1 || kuhn(mt[w]))
                {
                    mt[w] = v;
                    return true;
                }
            }
            return false;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = " Максимальное количество пар:\r\n";
         
                           // textBox1.Text += mtSize+"\r\n";
             double[,] A;
            A = new double[N, M];
            for (int i = 0; i < N; i++)
            {
                for (int j = 0; j < M; j++)
                {
                    try
                    {
                        A[i, j] = Convert.ToDouble(dataGridView1[i, j].Value);
                       if(A[i,j]==1) m++;
                       adj[i].GetLowerBound(j);
                       used.Add(false);
                       mt.Add(-1);
 
                    }
                    catch 
                    {
                        MessageBox.Show("Исправьте значения","Ошибка");
                        return;
                    }
                }
            }
            textBox1.Text += m+"()\r\n";
       }
 
        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            N = (int)numericUpDown1.Value;
            dataGridView1.RowCount = N;
        }
 
        private void numericUpDown2_ValueChanged(object sender, EventArgs e)
        {
            M = (int)numericUpDown2.Value;
            dataGridView1.ColumnCount = M;
        }
 
       private void solve()
        {
            for (int v = 0; v <N; ++v)
            {
                used.Add(false);
                if (kuhn(v))
                {
                    mtSize++;
                }
            }
        }
 
       private void button2_Click(object sender, EventArgs e)
       {
           textBox1.Text += mtSize + "\r\n";
       }    
    }
}

Решение задачи: «Ошибка: "Индекс за пределами диапазона"»

textual
Листинг программы
.GetLowerBound()

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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