Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <vector>
- #include <queue>
- using namespace std;
- const int NB_MAX_NOEUDS = 1000;
- const int INFINI = 1000*1000*1000;
- const int INDEFINI = -INFINI;
- struct arrete
- {
- int idNoeudArrive;
- int poidsArrete;
- arrete() {}
- arrete(int idNoeudArrive, int poidsArrete) : idNoeudArrive(idNoeudArrive), poidsArrete(poidsArrete) {}
- };
- struct noeud
- {
- int idNoeud;
- int dist;
- noeud() {}
- noeud(int idNoeud, int dist) : idNoeud(idNoeud), dist(dist) {}
- bool operator < (const noeud &autre) const
- {
- return dist < autre.dist;
- }
- };
- struct Distance
- {
- int dist;
- int idPere;
- Distance() {}
- Distance(int dist, int idPere) : dist(dist), idPere(idPere) {}
- };
- vector<arrete> voisinDuNoeud[NB_MAX_NOEUDS+2];
- priority_queue<noeud> noeudsAVisiter;
- Distance dist[NB_MAX_NOEUDS+2];
- int nbNoeuds, nbArretes, noeudDepart, noeudArrive;
- void initDist()
- {
- for(int iCase = 0 ; iCase < NB_MAX_NOEUDS+2 ; iCase++)
- dist[iCase].dist = INDEFINI;
- }
- int main()
- {
- scanf("%d%d%d%d", &nbNoeuds, &nbArretes, &noeudDepart, &noeudArrive);
- initDist();
- for(int iArrete = 0 ; iArrete < nbArretes ; iArrete++)
- {
- int noeud1, noeud2, poids;
- scanf("%d%d%d", &noeud1, &noeud2, &poids);
- voisinDuNoeud[noeud1].push_back(arrete(noeud2, poids));
- voisinDuNoeud[noeud2].push_back(arrete(noeud1, poids));
- }
- noeudsAVisiter.push(noeud(noeudDepart, 0));
- while(!noeudsAVisiter.empty())
- {
- int idNoeudEnCours = noeudsAVisiter.top().idNoeud;
- int distNoeudEnCours = noeudsAVisiter.top().dist;
- if(dist[idNoeudEnCours].dist == INDEFINI)
- {
- dist[idNoeudEnCours].dist = distNoeudEnCours;
- if(idNoeudEnCours == noeudDepart)
- dist[idNoeudEnCours].dist = 0;
- for(int iVoisin = 0 ; iVoisin < voisinDuNoeud[idNoeudEnCours].size() ; iVoisin++)
- noeudsAVisiter.push(noeud(voisinDuNoeud[idNoeudEnCours][iVoisin].idNoeudArrive, dist[idNoeudEnCours].dist+voisinDuNoeud[idNoeudEnCours][iVoisin].poidsArrete));
- noeudsAVisiter.pop();
- }
- else
- noeudsAVisiter.pop();
- }
- printf("%d\n", dist[noeudArrive].dist);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement