Advertisement
Danielos168

Ścieżka

Nov 20th, 2019
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.41 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. class Program
  4. {
  5.     // wynik [0,0] = 0
  6.     // wynik [0,j] = w[0, j-1] + p[0, j-1]
  7.     // wynik [i,0] = w[i-1 ,0] + d[i-1, 0]
  8.     // wynik [i,j] = max(w[i, j-1] + p[i, j-1],  w[i-1 ,j] + d[i-1, j])
  9.     static int Nagroda(int[,] p, int[,] d,int n,int m,int[,]kroki)
  10.     {
  11.         int[,] wynik = new int[n + 1, m+1];
  12.         wynik[0, 0] = 0;
  13.         for (int i = 1; i < n+1; i++)
  14.         {
  15.             wynik[i,0]=wynik[i-1,0]+d[i-1,0];
  16.             kroki[i, 0] = 1;//down
  17.         }
  18.  
  19.         for (int j = 1; j < m+1; j++)
  20.         {
  21.             wynik[0, j] = wynik[0, j - 1] + p[0, j - 1];
  22.             kroki[0, j] = 2;//right
  23.         }
  24.  
  25.         for (int i = 1; i < n+1; i++)
  26.         {
  27.             for (int j = 1; j < m+1; j++)
  28.             {
  29.                 //wynik[i, j] = Math.Max(wynik[i, j - 1] + p[i, j - 1], wynik[i - 1, j] + d[i - 1, j]);
  30.                 if(wynik[i, j - 1] + p[i, j - 1]>= wynik[i - 1, j] + d[i - 1, j])
  31.                 {
  32.                     wynik[i, j] = wynik[i, j - 1] + p[i, j - 1];
  33.                     kroki[i, j] = 2;//right
  34.                 }
  35.                 else
  36.                 {
  37.                     wynik[i, j] = wynik[i - 1, j] + d[i - 1, j];
  38.                     kroki[i, j] = 1;//down
  39.                 }
  40.             }
  41.         }
  42.         return wynik[n, m];
  43.     }
  44.     static void ścieżka(int[,]kroki,int n,int m)
  45.     {
  46.         int i = n;
  47.         int j = m;
  48.         Stack<string> s = new Stack<string>();
  49.         while (kroki[i,j]>0)
  50.         {
  51.             if (kroki[i,j]==1)
  52.             {
  53.                 s.Push("down");
  54.                 i--;
  55.             }
  56.             else
  57.             {
  58.                 s.Push("right");
  59.                 j--;
  60.             }
  61.         }
  62.         while (s.Count>0)
  63.         {
  64.             Console.WriteLine(s.Pop());
  65.         }
  66.     }
  67.     static void Main(string[] args)
  68.     {
  69.         int n = 4, m = 4;
  70.         int[,] p =
  71.         {
  72.             { 3,2,4,0 },
  73.             { 3,2,4,2 },
  74.             { 0,7,3,4 },
  75.             { 3,3,0,2 },
  76.             { 1,3,2,2 }
  77.         };
  78.         int[,] d =
  79.         {
  80.             { 1,0,2,4,3 },
  81.             { 3,6,5,2,1 },
  82.             { 4,4,5,2,1 },
  83.             { 5,6,8,5,3 }
  84.         };
  85.         int[,] kroki = new int[n + 1, m + 1];
  86.         Console.WriteLine(Nagroda(p,d,n,m,kroki));
  87.         ścieżka(kroki, n, m);
  88.         Console.ReadKey();
  89.     }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement