Pagini recente » Cod sursa (job #1801254) | Cod sursa (job #974188) | Cod sursa (job #1498492) | Cod sursa (job #997981) | Cod sursa (job #860591)
Cod sursa(job #860591)
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
ifstream in ("ubuntzei.in");
ofstream out ("ubuntzei.out");
vector<vector<int> > *a;
vector<int> *v1;
vector<int>s;
int min_g =10000000,n;
bool continu(int j){
int i;
for(i=0;i<j;i++)
if(s[i] == s[j])
return false;
return true;
}
void min (){
int suma_l=0,i;
suma_l += (*a)[0][s[0]];
for(i=0;i<s.size();i++)
suma_l += (*a)[s[i]][s[i+1]];
suma_l += (*a)[s[s.size()-1]][n-1];
if(min_g>suma_l)
min_g = suma_l;
}
void back(int l){
int i;
for(i=0;i<s.size();i++)
{
s[l] = (*v1)[i];
if(continu(l)){
if(l<s.size()-1)
back(l+1);
else
min();
}
}
}
int main (){
int m,k,i,j,t;
in>>n>>m>>k;
s.resize(k);
vector<vector<int> > d(n,vector<int>(n,100000));
a = &d;
vector<int>v(k);
v1 = &v;
for(i=0;i<k;i++)
in>>v[i];
for(i=0;i<m;i++)
{
in>>j>>t;
j--;t--;
in>>d[j][t];
d[t][j] = d[j][t];
}
for(t=0;t<n;t++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(d[i][j] > d[i][t] + d[t][j])
{
d[i][j] = d[i][t] + d[t][j];
}
//cout<<"\n";
//for(i=0;i<n;i++)
//{
//for(j=0;j<n;j++)
//cout<<d[i][j]<<" ";
//cout<<"\n";
//}
//
//
//
if(k==0)
out<<d[0][n-1];
else{
back(0);
out<<min_g;
}
return 0;
}