Pagini recente » Cod sursa (job #1684287) | Cod sursa (job #1671175) | Cod sursa (job #1626268) | Cod sursa (job #2909927) | Cod sursa (job #638182)
Cod sursa(job #638182)
#include<fstream>
#include<iostream>
#include<queue>
using namespace std;
#define INF 2147483647
#define pii pair<int,int>
#define mp make_pair
#define X first
#define Y second
ifstream f("portal3.in");
ofstream g("portal3.out");
struct nod
{ int to;
int cost;
nod(int a, int ct)
{ to = a; cost = ct;
}
};
int T, N, M;
vector<nod>graf[10];
queue<int>q;
pii nods[10];
int sol[10];
int abs(int a)
{ if(a < 0) return -a;
return a;
}
int dist(int a, int b)
{ return abs(nods[a].X - nods[b].X) + abs(nods[a].Y - nods[b].Y);
}
void bellman()
{ int i, j;
int v, c;
q.push(1);
sol[1] = 0;
for(i = 2; i < 10; i++) sol[i] = INF;
while(!q.empty())
{ i = q.front(); q.pop();
for(j = 0; j < graf[i].size(); j++)
{ v = graf[i][j].to; c = graf[i][j].cost;
if(sol[v] > sol[i] + c)
sol[v] = sol[i] + c, q.push(v);
}
}
}
int main()
{ int i, j, x, y, x2, y2, c;
nods[1] = mp(0, 0);
f>>T;
for(; T; T--)
{ f>>N>>M;
f>>x>>y>>x2>>y2>>c;
nods[2] = mp(x, y);
nods[3] = mp(x2, y2);
graf[2].push_back(nod(3 , c));
graf[3].push_back(nod(2 , c));
f>>x>>y>>x2>>y2>>c;
nods[4] = mp(x, y);
nods[5] = mp(x2, y2);
graf[4].push_back(nod(5 , c));
graf[5].push_back(nod(4 , c));
f>>x>>y>>x2>>y2>>c;
nods[6] = mp(x, y);
nods[7] = mp(x2, y2);
graf[6].push_back(nod(7 , c));
graf[7].push_back(nod(6 , c));
nods[8] = mp(N, M);
for(i = 1; i < 8; i++)
for(j = (i == 2 || i == 4 || i == 6)?i + 2 : i + 1; j <= 8; j++)
{ graf[i].push_back(nod(j, dist(i, j)));
graf[j].push_back(nod(i, dist(i, j)));
}
/*for(i = 1; i <= 8; i++)
{ cout<<"NOD: "<<i<<'\n';
for(j = 0; j < graf[i].size(); j++) cout<<graf[i][j].to<<" "<<graf[i][j].cost<<'\n';
cout<<"//////////////////////////"<<'\n';
}*/
bellman();
g<<sol[8]<<'\n';
for(i = 1; i <= 8; i++) graf[i].clear();
}
f.close();
g.close();
return 0;
}