Ewentualnie możesz skorzystać z Chat GPT. Zrobiłem to za Ciebie i oto odpowiedź :P
Witaj! Zadanie, które opisujesz, to problem najkrótszej ścieżki w grafie, który można rozwiązać za pomocą algorytmów takich jak Dijkstra, Bellmana-Forda lub A*. Oto kilka kroków, które pomogą Ci napisać program, który rozwiąże ten problem w C#:
- Zdefiniuj klasę
Miasto
, która będzie reprezentować każde miasto. Klasa powinna zawierać pola nazwa
i sąsiedzi
, które będą przechowywać informacje o nazwie miasta i o innych miastach, do których prowadzą bezpośrednie połączenia oraz ich odległości.
public class Miasto
{
public string Nazwa { get; set; }
public Dictionary<Miasto, int> Sąsiedzi { get; set; }
public Miasto(string nazwa)
{
Nazwa = nazwa;
Sąsiedzi = new Dictionary<Miasto, int>();
}
}
- Zdefiniuj klasę
Graf
, która będzie reprezentować zbiór miast i połączeń między nimi. Klasa powinna zawierać pole miasta
, które będzie przechowywać informacje o wszystkich miastach w grafie.
public class Graf
{
public List<Miasto> Miasta { get; set; }
public Graf()
{
Miasta = new List<Miasto>();
}
public void DodajMiasto(Miasto miasto)
{
Miasta.Add(miasto);
}
}
- Dodaj metody do klasy
Graf
, które umożliwią dodanie połączeń między miastami. Metoda DodajPołączenie
będzie dodawać połączenie między dwoma miastami o podanych nazwach i odległości.
public void DodajPołączenie(string nazwaMiasta1, string nazwaMiasta2, int odległość)
{
var miasto1 = Miasta.Find(m => m.Nazwa == nazwaMiasta1);
var miasto2 = Miasta.Find(m => m.Nazwa == nazwaMiasta2);
miasto1.Sąsiedzi.Add(miasto2, odległość);
miasto2.Sąsiedzi.Add(miasto1, odległość);
}
- Napisz metodę
NajkrótszaŚcieżka
, która za pomocą algorytmu Dijkstry wyznaczy najkrótszą ścieżkę między dwoma miastami. Metoda powinna przyjmować nazwy miast jako argumenty oraz zwracać listę miast, które należy odwiedzić, aby dotrzeć z pierwszego miasta do drugiego, oraz długość tej trasy.
public (List<Miasto> Ścieżka, int Długość) NajkrótszaŚcieżka(string nazwaMiasta1, string nazwaMiasta2)
{
var start = Miasta.Find(m => m.Nazwa == nazwaMiasta1);
var meta = Miasta.Find(m => m.Nazwa ==