Pagini recente » Cod sursa (job #1296406) | Cod sursa (job #736068) | Cod sursa (job #2104568) | Cod sursa (job #9631) | Cod sursa (job #2864614)
#include <list>
#include <fstream>
#include <queue>
#include <vector>
struct szomszed
{
int vegpont;
int suly;
};
struct onmaga
{
int szam;
unsigned long long osszeg=0;
};
struct CompareSuly
{
bool operator()(onmaga &p1, onmaga &p2)
{
return p1.osszeg > p2.osszeg;
}
};
using namespace std;
ifstream cin("ubuntzei.in");
ofstream cout("ubuntzei.out");
int m,n,kdb;
list<szomszed> v[2001];
int varos[20];
bool k[2001];
priority_queue<onmaga,vector<onmaga>,CompareSuly> pq;
unsigned long long minm=0;
bool jart[2001];
unsigned long long tav[2001];
onmaga aktualis;
onmaga on;
unsigned long long matrix[20][20];
queue<int> szell;
void dijsktra(int kezd)
{
on.szam=kezd;
on.osszeg=0;
pq.push(on);
for (int i=0; i<=2000; i++)
{
tav[i]=184467440737095516;
}
for (int i=0; i<=2000; i++)
{
jart[i]=false;
}
tav[kezd]=0;
while (!pq.empty())
{
aktualis = pq.top();
pq.pop();
jart[aktualis.szam]=true;
for (szomszed l : v[aktualis.szam])
{
unsigned long long tavolsag=aktualis.osszeg+l.suly;
if(jart[l.vegpont]!=true)
{
if(tav[l.vegpont]>tavolsag)
{
tav[l.vegpont]=tavolsag;
onmaga ledik;
ledik.szam=l.vegpont;
ledik.osszeg=tav[l.vegpont];
pq.push(ledik);
}
}
}
}
for (int i=0;i<=kdb+1;i++){
if(kezd!=varos[i])
{
matrix[kezd][i]=tav[varos[i]];
cout<<tav[varos[i]]<<" ";
}
else{
cout<<"*"<<" ";
}
}
cout<<endl;
}
int main()
{
cin>>n>>m>>kdb;
varos[0]=1;
for (int i=1; i<=kdb; i++)
{
cin>>varos[i];
}
varos[kdb+1]=n;
for (int i=0; i<m; i++)
{
int a;
int b;
int c;
cin>>a>>b>>c;
szomszed l;
l.vegpont=b;
l.suly=c;
v[a].push_back(l);
l.vegpont=a;
v[b].push_back(l);
}
if(kdb==0){
dijsktra(1);
cout<<tav[varos[kdb+1]];
}
else{
for (int j=0;j<=kdb+1;j++){
dijsktra(varos[j]);
}
}
szell.push(1);
/*while(!szell.empty()){
//for (int i=1;i<=kdb+1;i++)
}*/
return 0;
}