Векторный индекс вне диапазона Дейкстры [закрыто]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Векторный индекс вне диапазона Дейкстры [закрыто]

Сообщение Anonymous »

Код: Выделить всё

#include 
#include 
#include 
#define NON_HA_PARENT -1
using namespace std;

//void mostra_citta(vector vect_citta, int n_nodi);
//void mostra(vector distanze, int n_nodi, int radice, vector parent, vector vect_citta);

void algoritmo(vector graph, int radice, int n_nodi, vector vect_citta);
void mostra_path(int vertice_corrente, vector parent, vectorvect_citta);
int controllo_dei_nodi_vicini(vector distanze, vector sono_stati_visitati, int n_nodi);
int prendi_source(int& n_nodi, vector& vect_citta);
bool controllo_presenza(string& input);
vector costruisci_graph(int n_nodi, vector vect_citta);
vector crea_vect_citta(int& n_nodi);
vector costruzione_graph_classe(int n_nodi, vector vect_citta);

class db_le_citta
{
public:
vector distanze_citta ={//0   1   2   3   4   5   6   7   8   9   10  11  12
{0  ,153,0  ,0  ,263,0  ,312,0  ,0  ,0  ,0  ,0  ,0  },          //bari
{153,0  ,582,0  ,413,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  },          //lecce
{0  ,582,0  ,211,592,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  },          //catania
{0  ,0  ,211,0  ,716,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  },          //palermo
{263,413,592,716,0  ,227,247,0  ,0  ,0  ,0  ,0  ,0  },          //napoli
{0  ,0  ,0  ,0  ,227,0  ,210,275,0  ,0  ,0  ,513,0  },          //roma
{312,0  ,0  ,0  ,247,210,0  ,399,365,0  ,0  ,0  ,0  },          //pescara
{0  ,0  ,0  ,0  ,0  ,275,399,0  ,105,0  ,0  ,253,0  },          //firenze
{0  ,0  ,0  ,0  ,0  ,0  ,365,105,0  ,154,213,294,0  },          //bologna
{0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,154,0  ,278,0  ,0  },          //venezia
{0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,213,278,0  ,346,143},          //milano
{0  ,0  ,0  ,0  ,0  ,513,0  ,253,294,0  ,346,0  ,169},          //genova
{0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,143,169,0  },          //torino
};
vector nomi_citta = {"bari","lecce","catania","palermo","napoli","roma","pescara","firenze","bologna","venezia","milano","genova","torino"};
//aggiungere metodi per aggiunta di citta
};

int main()
{
int n_nodi = 0;
cout > n_nodi;

vector vect_citta = crea_vect_citta(n_nodi);
vector grap = costruisci_graph(n_nodi, vect_citta);
int source = prendi_source(n_nodi, vect_citta);
algoritmo(grap, source, n_nodi, vect_citta);
return 0;
}

void algoritmo(vector graph, int radice, int n_nodi, vector vect_citta) {

vector distanze(n_nodi), parent(n_nodi);
vector sono_stati_visitati(n_nodi); //flags per i visitati
//inizializzo tutto
for (int i = 0; i < n_nodi; i++)
{
distanze[i] = INT_MAX;
sono_stati_visitati[i] = false;
}

distanze[radice] = 0;// distanza dalla radice = 0
parent[radice] = NON_HA_PARENT;

for (int i = 0; i < n_nodi - 1; i++)
{
int nodo_vicino = controllo_dei_nodi_vicini(distanze, sono_stati_visitati, n_nodi);
//nodi vicini vengono analizzati, int nodo vicino � il nodo preso in considerazione

sono_stati_visitati[nodo_vicino] = true; //� stato visitato il nodo vicino

for (int adiacente = 0; adiacente < n_nodi; adiacente++) //fase di update delle distanze dei n_nodi adiacenti
{
if (!sono_stati_visitati[adiacente]            //se non � nell'array dei visitati "sono_stati_visitati"
&& graph[nodo_vicino][adiacente]           //esiste la connessione tra il vicino e l'adiacente
&&  distanze[nodo_vicino] != INT_MAX        //distanza del nodo vicino non � infinita
&& distanze[nodo_vicino] + graph[nodo_vicino][adiacente] < distanze[adiacente]) //il peso del viaggio dalla source al nodo adiacente � piccolo rispetto alla distanza corrente dell'adiacente
{
parent[adiacente] = nodo_vicino; //parent serve per printare il path
distanze[adiacente] = distanze[nodo_vicino] + graph[nodo_vicino][adiacente];
}
}
}

//mostriamo
for (int i = 0; i < n_nodi; i++) {
if (i != radice)
{
cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/78532142/vector-subscript-out-of-range-dijkstra[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»