@Shalom to mi się udało zrobić już wcześniej( przynajmniej tak mi się wydaje) - w metodzie generujPary.
Kod ogólnie ma ogarniać problem najmniejszej ilości ruchów dla skoczków szachowych z pól a[] na pola b[] (tylko wypisać najmniejszą ilość ruchów) przy czym najpierw będę miał podane N pozycji startowych a później N pozycji końcowych przy czym żadne pole nie jest sztywno przypisane do drugiego tylko ma zostać wybrana najlepsza kombinacja. Napisałem już kod dla 1 skoczka, algorytm tworzący wszystkie możliwe pary również, ale się zaciąłem i nie mam pojęcia co dalej :(. Chyba powinienem zrobić jakąś metodę rekurencyjną biorącą pod uwagę coraz to mniejszy zbiór par??? Ale nie wiem jak to ugryźć. Tu zamieszczam kod(proszę nie patrzeć na main'a bo nie jest istotny):
#include <bits/stdc++.h>
#include <vector>
using namespace std;
struct Pole{
int x;
int y;
int odl;
Pole() {}
Pole(int x, int y, int odl) {
this->x = x;
this->y = y;
this->odl = odl;
}
};
struct Para{
int x;
int y;
Para() {}
Para(int x, int y) {
this->x = x;
this->y = y;
}
};
bool operator==(const Pole& lhs, const Pole& rhs)
{
return (lhs.x == rhs.x) && (lhs.y == rhs.y);
}
int odlegloscDlaJednegoSkoczka(Pole poleStartowe, Pole poleKoncowe){
int ruchyX[] = { -2, -1, 1, 2, -2, -1, 1, 2 };
int ruchyY[] = { -1, -2, -2, -1, 1, 2, 2, 1 };
queue<Pole> stosik;
vector<Pole> odwiedzone;
Pole pole;
int x,y;
stosik.push(poleStartowe);
odwiedzone.push_back(Pole(pole.x,pole.y,0));
while(!stosik.empty()){
pole = stosik.front();
stosik.pop();
if(pole.x == poleKoncowe.x && pole.y == poleKoncowe.y){
return pole.odl;
}
for (int i = 0; i < 8; i++) {
x = pole.x + ruchyX[i];
y = pole.y + ruchyY[i];
if (count(odwiedzone.begin(),odwiedzone.end(), Pole(x,y,0)) == 0) {
odwiedzone.push_back(Pole(x,y,0));
stosik.push(Pole(x, y, pole.odl + 1));
}
}
}
return 0;
}
void generujPary(vector<Para> *pary, int n){
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
pary->push_back(Para(i,j));
}
}
}
void generujWyniki(vector<int> *wyniki, vector<Para> pary){
vector<Para> wybrane;
}
void wypiszNajkrotsza(vector<int> wyniki){}
int main()
{
int n=10;
vector<Para> pary;
generujPary(&pary, n/2);
vector<int> wyniki;
generujWyniki(&wyniki, pary);
wypiszNajkrotsza(wyniki);
return 0;
}