Невозможно обнаружить любую ошибку, но мои программы зависают - PullRequest
0 голосов
/ 06 декабря 2010

Например, я должен матрицы

  Allocation Matrix

  0 0 1 0
  2 0 0 1
  0 1 2 0

  Request matrix
  2 0 0 1
  1 0 1 0
  2 1 0 0

  Resources in Existence: 4 2 3 1
  Available resources: 2 1 0 0

Мой код

            for (w = 0; w < TRows; )
            {
                if (Finish[w] == 0)
                {
                    flag = 0;
                    for (x = 0; x < TColumns; x++)
                    {
                        if (A[x] >= Request[w, x])
                            flag = flag + 1;
                    }
                    if (flag == TColumns)
                    {
                        T[y] = w;
                        Finish[w] = 1;
                        for (x = 0; x < TRows; x++)
                        {
                            A[x] = A[x] + Allocation[w, x];
                        }
                        y = y + 1;
                        w = -1;
                        //break;
                    }
                    w++;
                }
            }

Ответы [ 2 ]

2 голосов
/ 06 декабря 2010

Прежде всего, используйте более описательные имена переменных.Ваш код почти невозможно прочитать.Хотя я обнаружил, по крайней мере, одну проблему:

for (w = 0; w < TRows; )
{
    if (Finish[w] == 0)
    {
        /* snip */
        w++;
        /* snip */
    }
}

Если Finish[w] (что бы это ни значило), в конечном итоге оказалось чем-то иным, чем 0.w никогда не будет увеличено, и вы получите бесконечный цикл.И если бы это всегда было 0, вам не понадобился бы этот тест для начала.Что-то не так с вашей логикой здесь.

2 голосов
/ 06 декабря 2010

Эта строка выглядит неправильно.

for (w = 0; w < TRows; )

Как закончится этот цикл, если Finish[0] отличен от нуля?

Вы пробовали Debug-Break-All вVisual Studio, чтобы увидеть, где он висел?

...