Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #define SIZEN 101
- #define SIZENC 11
- using namespace std;
- int nc, sx, sy, dx, dy, cx[SIZENC], cy[SIZENC],minimum,flag[SIZENC],Case=1;
- void readCase(){
- scanf("%d%d%d%d%d", &nc, &sx, &sy, &dx, &dy);
- for (int i = 1; i <=nc; i++){
- scanf("%d%d", &cx[i], &cy[i]);
- }
- cx[0] = sx;
- cy[0] = sy;
- }
- int diff(int u,int v){
- int difference = abs(cx[u] - cx[v]) + abs(cy[u] - cy[v]);
- return difference;
- }
- void solve(int l, int i, int cost){
- if (l==nc){
- cost += abs(cx[i] - dx) + abs(cy[i] - dy);
- if (cost<minimum)
- minimum = cost;
- return;
- }
- for (int j = 1; j <= nc; j++){
- if (flag[j] == 0){
- flag[j] = 1;
- solve(l + 1, j, cost + diff(i, j));
- flag[j] = 0;
- }
- }
- }
- void solveCase(){
- minimum = 1000000;
- for (int i = 1; i <= nc; i++)
- flag[i] = 0;
- solve(0, 0, 0);
- }
- int main(){
- freopen("fin.txt", "r", stdin);
- freopen("fout.txt", "w", stdout);
- int t;
- scanf("%d", &t);
- while (t--){
- readCase();
- solveCase();
- printf("#%d %d\n", Case++, minimum);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement