2010-12-06 2 views
0

Для примера я матрицамНевозможно обнаружить какую-либо ошибку, но мои программы висит

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++; 
       } 
      } 
+1

вы должны обязательно пройти через него с помощью отладчика. – Artemiy 2010-12-06 17:54:35

ответ

2

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

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

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

2

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

Как эта петля когда-либо закончится, если Finish[0] отличная от нуля?

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

 Смежные вопросы

  • Нет связанных вопросов^_^