Untitled
unknown
plain_text
2 years ago
1.5 kB
3
Indexable
#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; int dist[12][12]; int visited[12]; int Map[12][2]; int nTestcase, N, xStart, yStart, xEnd, yEnd, step, Min; void BFS(int start) { for (int i = 0; i < N + 2; i++) { int x = Map[start][0] > Map[i][0] ? Map[start][0] - Map[i][0] : Map[i][0] - Map[start][0]; int y = Map[start][1] > Map[i][1] ? Map[start][1] - Map[i][1] : Map[i][1] - Map[start][1]; dist[start][i] = x + y; } } void backtrack(int Start, int nPizza) { if (step >= Min) { return; } if (nPizza == N) { step += dist[Start][N + 1]; Min = Min > step ? step : Min; step -= dist[Start][N + 1]; return; } for (int i = 1; i < N + 1; i++) { if (visited[i] == 0) { visited[i] = 1; step += dist[Start][i]; backtrack(i, nPizza + 1); visited[i] = 0; step -= dist[Start][i]; } } } int main() { //freopen("input.txt", "r", stdin); cin >> nTestcase; for (int testcase = 1; testcase <= nTestcase; testcase++) { cin >> xStart >> yStart >> xEnd >> yEnd >> N; Map[0][0] = xStart; Map[0][1] = yStart; Map[N+1][0] = xEnd; Map[N+1][1] = yEnd; for (int i = 1; i <= N; i++) { cin >> Map[i][0] >> Map[i][1]; } for (int i = 0; i < N + 2; i++) { BFS(i); visited[i] = 0; } step = 0; Min = 1000000000; visited[0] = 1; backtrack(0, 0); cout << "Case #" << testcase << " " << Min << endl; } return 0; }
Editor is loading...
Leave a Comment