Просмотр источника
\\ {code:title=Knight1.cpp\|borderStyle=solid} #include <bits/stdc++.h> using namespace std; struct moves { int x; int y; int StepNumber; }; queue <moves> MQue; bool Marked[8][8], Found; int Ex,Ey,Sx,Sy; void StartProcess() { string s; getline(cin,s); Sx=int(s[0])-int('A'); Sy=int(s[1])-int('1'); Ex=int(s[3])-int('A'); Ey=int(s[4])-int('1'); for (int i=0; i<8; i++) for (int j=0; j<8; j++) Marked[i][j]=false; moves StartMove; StartMove.x=Sx; StartMove.y=Sy; StartMove.StepNumber=0; MQue.push(StartMove); } void PutAll(moves CurrMove, bool &Found) { moves Cur; Cur.StepNumber=CurrMove.StepNumber; int steps[8][2] = {{1,-2},{1,2},{-1,-2},{-1,2},{2,-1},{2,1},{-2,-1},{-2,1}}; Found = false; for (int i=0; (i<8) and (not Found); i++) { Cur.x=CurrMove.x+steps[i][0]; Cur.y=CurrMove.y+steps[i][1]; Found = (Ex==Cur.x) && (Ey==Cur.y); if ((Cur.x>=0) && (Cur.x<8) && (Cur.y>=0) && (Cur.y<8) && (not Marked[Cur.x][Cur.y])) {MQue.push(Cur); Marked[Cur.x][Cur.y]=true;}; } } int main() { freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); StartProcess(); Found=(Sx==Ex) && (Sy==Ey); while (not Found) { moves CurrMove=MQue.front(); MQue.pop(); CurrMove.StepNumber++; PutAll(CurrMove,Found); } cout << MQue.back().StepNumber; } {code}\\ {code:title=Knight2.cpp\|borderStyle=solid} #include <bits/stdc++.h> using namespace std; queue<int> X,Y,SN; // Вводим три очереди по одному числу, // а не одну, хранящую структуру bool Marked[8][8], Found; int Ex,Ey,Sx,Sy; void StartProcess() { string s; getline(cin,s); Sx=int(s[0])-int('A'); // нумерация с нуля Sy=int(s[1])-int('1'); Ex=int(s[3])-int('A'); Ey=int(s[4])-int('1'); for (int i=0; i<8; i++) for (int j=0; j<8; j++) Marked[i][j]=false; X.push(Sx); Y.push(Sy); SN.push(0); } void PutAll(int x, int y, int sn, bool &Found) { int steps[8][2] = {{1,-2},{1,2},{-1,-2},{-1,2},{2,-1},{2,1},{-2,-1},{-2,1}}; Found = false; for (int i=0; (i<8) and (not Found); i++) { int Cx=x+steps[i][0]; int Cy=y+steps[i][1]; Found = (Ex==Cx) && (Ey==Cy); if ((Cx>=0) && (Cx<8) && (Cy>=0) && (Cy<8) && (not Marked[Cx][Cy])) {X.push(Cx); Y.push(Cy); SN.push(sn); Marked[Cx][Cy]=true;}; } } int main() { freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); StartProcess(); Found=(Sx==Ex) && (Sy==Ey); while (not Found) { int x = X.front(); X.pop(); int y = Y.front(); Y.pop(); int sn=SN.front(); SN.pop(); sn++; PutAll(x,y,sn,Found); } cout << SN.back(); } {code}\\ \\ |