#include using namespace std; int shipX[16], shipY[16]; int shipDistances[16][16]; int heightMap[256][256]; int dArr[256][256]; int N, K; int getDist(int posX, int posY, int vX, int vY) { if (heightMap[posX][posY]=dArr[posX][posY]) return; dArr[posX][posY] = dist; recurse(posX+1, posY, dist+getDist(posX, posY, 1, 0)); recurse(posX-1, posY, dist+getDist(posX, posY, -1, 0)); recurse(posX, posY+1, dist+getDist(posX, posY, 0, 1)); recurse(posX, posY-1, dist+getDist(posX, posY, 0, -1)); } void dijkstra(int shipNum) { //cout<<"Calculating ship "<>N>>K; memset(heightMap, -1, sizeof(heightMap[0][0])*256*256); //cout<>heightMap[i][j]; for (int i=0;i<=K;i++) in>>shipX[i]>>shipY[i]; for (int i=0;i<=K;i++) { dijkstra(i); } /*for (int i=0;i<=K;i++) { for (int j=0;j<=K;j++) cout< hue; for (int i=1;i<=K;i++) hue.push_back(i); int best = 1<<30; do { int curr_dist = shipDistances[0][hue[0]]; for (int i=0;i