Pagini recente » Cod sursa (job #1835758) | Cod sursa (job #2185935) | Cod sursa (job #1067826) | Cod sursa (job #3189700) | Cod sursa (job #1215324)
# include <fstream>
# include <vector>
# include <queue>
# define DIM 100
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const int INF=(1LL*1<<31)-1;
int n,m,i,x,y,d[DIM],t[DIM];
vector<pair<int,int> > a[DIM];
queue<int> c;
void read()
{
int w;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y>>w;
a[x].push_back(make_pair(y,w));
}
f>>x>>y;
}
void dijkstra()
{
int z;
bool b[DIM];
for(i=1;i<=n;i++)
{
b[i]=0;
d[i]=INF;
}
c.push(x);
b[x]=1;
d[x]=0;
while(!c.empty())
{
z=c.front();
c.pop();
b[z]=0;
for(i=0;i<a[z].size();i++)
if(d[a[z][i].first]>d[z]+a[z][i].second)
{
d[a[z][i].first]=d[z]+a[z][i].second;
t[a[z][i].first]=z;
if(!b[a[z][i].first])
{
c.push(a[z][i].first);
b[a[z][i].first]=1;
}
}
}
}
void write()
{
g<<d[y]<<'\n';
while(t[y])
{
g<<t[y]<<" ";
y=t[y];
}
}
int main()
{
read();
dijkstra();
write();
f.close();
g.close();
return 0;
}