Reklama
Pokazuje wyniki od 1 do 4 z 4

Temat: [C++] Komiwojażer

  1. #1

    Data rejestracji
    2014
    Posty
    560
    Siła reputacji
    10

    Domyślny [C++] Komiwojażer

    Kod:
        #include <iostream>
        #include <math.h>
        #include <iomanip> // potrzebne do precyzji
        using namespace std;
    
        int main()
        {
        //Zmienne
        int
        miasto_start,
        miasto_nr,
        sasiad = 0;
    
        //deklaracja tablcy dwuwymiarowej dla wspolrzednych
        float droga_calkowita;
        float SUM = 0;
    
        cout << „Ilosc miast: „;
        cin >> miasto_nr;
        float tab[miasto_nr][2];
    
        //wpisanie danch do tablicy
        for (int i=0, j=1; i<miasto_nr; i++,j++)
        {
        cout << „Pozycja x miasta „<< j << ” na osi xy\t”;
        cin >> tab[i][0];
        cout << „Pozycja y miasta „<< j << ” na osi xy\t”;
        cin >> tab[i][1];
        cout << „\n”;
        }
    
        // wybór miasta startowego
        while(miasto_start <= 0 || miasto_start > miasto_nr){
        cout << „\nMiasto startowe: „;
        cin >> miasto_start;
        }
    
        miasto_start –; //dopasowanie do pozyji w tablicy
        cout<<„\n\nTrasa wg. algorytmu najblizszego sasiada:\n”;
        // stwozenie tablicy dla odwiedzonych miast
        bool odwiedzone_tab[miasto_nr];
        for(int i=0; i<miasto_nr; i++) odwiedzone_tab[i] = false;
        odwiedzone_tab[miasto_start] = true;
    
        cout<<miasto_start+1;
    
        //OBLICZENIA
        int temp = miasto_start; // tablica pomocnicza
        for(int i=0; i<miasto_nr-1; i++)
        {
    
        float miasto_x = tab[temp][0]; //wartość x miasta w którym jestem wyciagnieta z tablicy miast
        float miasto_y = tab[temp][1]; //wartość y miasta w którym jestem wyciagnieta z tablicy miast
    
        float dystans=0, najblizsza_odleglosc=0;
        bool first = true;
    
        for(int i=0; i<miasto_nr; i++)
        {
        if(odwiedzone_tab[i] == false)
        {
        cout<<setprecision(2); // Ustawienie precyzji wyniku
        dystans = sqrt(pow((miasto_x – tab[i][0]), 2) + pow((miasto_y – tab[i][1]),2)); //obiczneie odleglosci (x1-x2)^2 + (y1-y2)^2 [pierwiatek z wartosci]
        if(first == true)
        {
        najblizsza_odleglosc = dystans+1;
        first = false;
        }
        if(dystans != 0 && dystans < najblizsza_odleglosc) // sprawdzenie czy odleglosc jest najmniejsza
        {
        najblizsza_odleglosc = dystans; //przypisanie wartosci dystans do najblizsza_odlegosc
        sasiad = i; // numer miast do ktorego odleglosc jest najmniejsza
        }
        }
        }
        SUM += najblizsza_odleglosc; // suma odleglosci przebytej drogi
        temp = sasiad;
        odwiedzone_tab[temp] = true;
        cout<<” -> „<<sasiad+1;
        }
        cout<<” -> „< droga_calkowita = sqrt(pow((tab[miasto_start][0] – tab[sasiad][0]), 2) + pow((tab[miasto_start][1] – tab[sasiad][1]),2)); // powrot do miasta startowego
        SUM += droga_calkowita;
        cout<<„\n\nCalkowita dlugosc trasy: „<<SUM<<„\n”;
        return 0;
        }
    Jest to dobry kod?

  2. #2
    Avatar Merinksban
    Data rejestracji
    2009
    Położenie
    Wrocław
    Wiek
    28
    Posty
    1,551
    Siła reputacji
    17


  3. Reklama
  4. #3
    Avatar Comxaa
    Data rejestracji
    2015
    Położenie
    Comxaa
    Wiek
    32
    Posty
    649
    Siła reputacji
    10

    Domyślny

    problem komiwojazera mozna sformulowac na bardzo wiele sposobow. Jednakze na oko wydaje mi sie, ze moze to nie byc dobry kod, niekoniecznie najlepiej odwiedzac najblizszego sasiada.

  5. #4

    Data rejestracji
    2014
    Posty
    560
    Siła reputacji
    10

    Domyślny

    Cytuj Comxaa napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    problem komiwojazera mozna sformulowac na bardzo wiele sposobow. Jednakze na oko wydaje mi sie, ze moze to nie byc dobry kod, niekoniecznie najlepiej odwiedzac najblizszego sasiada.
    To jest najprostszy algorytm z możliwych, najbliższego sąsiada. Mam zaliczyć tę sztuczną inteligencję tylko :-)

    Mam jeszcze rozpisać jeden cykl i w miare ogarniac o co tam chodzi.

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •