2016-03-31 7 views
-2
int main() { 
const int n = 5; 
int A[n][n]; // value of each cell 
int V[n][n]; // total value of each cell 

for (int i = 0; i < n; i++) 
{ 
    for (int j = 0; j < n; j++) 
    { 
     V[i][j] = 0; // initialize total value of each cell equal to zero 
     A[i][j] = rand() % 10; // set each cell's value equal to some number 0-9 
     printf("%i ", A[i][j]); 
    } 
    printf("\n"); 
} 

for (int i = 0; i < n; i++) 
{ 
    for (int j = 0; j < n; j++) 
    { 
     if (i == 0 && j == 0) 
     { 
      V[i][j] = A[i][j]; 
     } 
     else if (i == 0) 
     { 
      V[i][j] = V[i][j - 1] + A[i][j]; 
     } 
     else if (j == 0) 
     { 
      V[i][j] = V[i - 1][j] + A[i][j]; 
     } 
     else 
     { 
      if (V[i][j - 1] > V[i - 1][j]) 
      { 
       V[i][j] = V[i][j - 1] + A[i][j]; 
      } 
      else 
      { 
       V[i][j] = V[i - 1][j] + A[i][j]; 
      } 
     } 
    } 
} 
printf("\n"); 
for (int i = 0; i < n; i++) 
{ 
    for (int j = 0; j < n; j++) 
    { 
     if (V[i][j] < 10) printf(" %i ", V[i][j]); 
     else printf("%i ", V[i][j]); 
    } 
    printf("\n"); 
} 

cin.get(); 

}Etwas, das ich über Rand falsch verstehe()% ich?

Diese gibt http://i.imgur.com/Ak3KpPr.png

Was ich nicht verstehe ist, warum V [0] [2] 12 ausgibt, wenn es ausgeben soll V [0] [1] + A [0] [2] oder 7 + 4.

Kontext: Bei einem Flohmarkt stolpern Sie eines Tages auf ein Old-School-Videospiel. In diesem Videospiel muss dein Charakter eine Reise entlang eines n × n-Gitters machen und dabei Belohnungen sammeln. Speziell gibt es eine n × n Matrix A mit nichtnegativen Einträgen, und Ihr Charakter sammelt eine Belohnung gleich Aij, wenn er die Zelle (i, j) des Gitters besucht. Ihr Ziel ist es, die Summe der gesammelten Belohnungen von Ihrem Charakter zu maximieren. (a) [4 Punkte]. Die Regeln der ersten Stufe des Spiels sind wie folgt. Ihr Zeichen beginnt an der oberen linken Ecke - d. H. Der Zelle (1, 1) - des Gitters und muss sich in der Reihenfolge der Schritte zur unteren rechten Ecke - d. H. Zelle (n, n) - bewegen. Bei jedem Schritt darf dein Charakter entweder eine Zelle nach rechts oder eine Zelle nach unten im Gitter bewegen; nach oben, nach links, oder diagonal ist nicht erlaubt. Zeigen Sie, wie Sie die optimale Reise in O (n) Zeit berechnen.

+0

'V [0] [1] + A [0] [2]' es ist eigentlich 8 + 4. Also, 12 ist richtig. 'A [0] [1] + A [0] [2]' wäre 7 + 4. – DimChtz

+1

Vielen Dank. Ich bin zurückgeblieben. – remiss

Antwort

1

Woher hast du diese Idee über 7+4?

Ihr Code besagt eindeutig, dass V[0][2]V[0][1] + A[2][2] ist. Aber bei der vorherigen Iteration Ihres Zyklus wurde V[0][1] auf V[0][0] + A[0][1] gesetzt. Und bei der vorherigen Wiederholung Ihres Zyklus wurde V[0][0] auf A[0][0] gesetzt.

So ist V[0][0]1. Was macht V[0][1] = 1 + 7 = 8. Was macht V[0][2] = 8 + 4 = 12.

Alles ist wie Sie es implementiert haben.