#include #include #define INFTY 999999 #define MAX 20 struct state { int tx, ty; // Theseus int mx, my; // Minotaurus }; struct state queue[MAX*MAX*MAX*MAX]; int queue_head, queue_tail; int N, M, K; int Ex, Ey; // cíl int B[MAX][MAX]; // bludiště int D[MAX][MAX][MAX][MAX]; // stavový prostor struct state P[MAX][MAX][MAX][MAX]; // předchůdci struct state m_move(struct state s) /* pohni s Minotaurem a vrat nový stav */ { int i; for (i=0; i s.ty && B[s.mx][s.my-1] == '.') s.my--; if (s.my < s.ty && B[s.mx][s.my+1] == '.') s.my++; if (s.mx > s.tx && B[s.mx-1][s.my] == '.') s.mx--; if (s.mx < s.tx && B[s.mx+1][s.my] == '.') s.mx++; } return s; } void add(struct state s, int step, int dx, int dy) /* zařaď "rozlévací" stav do fronty */ { struct state t = s; t.tx += dx; t.ty += dy; if (t.tx>=0 && t.tx=0 && t.ty step) { queue[queue_tail++] = t; D[t.tx][t.ty][t.mx][t.my] = step; P[t.tx][t.ty][t.mx][t.my] = s; } } int main(void) { int i,j,x,y,c; struct state s; scanf("%d %d %d", &N, &M, &K); scanf("%d %d %d %d %d %d", // souřadnice Thesea, Minotaura a východu &s.tx, &s.ty, &s.mx, &s.my, &Ex, &Ey); for (i=0; i