Просмотр источника
{code:title=cell1.cpp\|borderStyle=solid} #include <bits/stdc++.h> using namespace std; struct moves { int x; int y; }; queue <moves> MQue; bool Marked[8][8]; void StartProcess() { for (int i=0; i<8; i++) for (int j=0; j<8; j++) Marked[i][j]=false; int n; cin >> n; for (int i=0; i<n; i++) { int x,y; cin >> x >> y; Marked[x-1][y-1]=true; } } bool Found(int &x, int &y) { for (int i=0; i<8; i++) for (int j=0; j<8; j++) if (not Marked[i][j]) { x=i; y=j; return true;}; return false; } void PutAll(moves CurrMove) { int steps[4][2] = {{0,-1},{0,1},{-1,0},{1,0}}; for (int i=0; i<4; i++) { moves Cur; Cur.x=CurrMove.x+steps[i][0]; Cur.y=CurrMove.y+steps[i][1]; 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(); int PieceNumber=0,x,y; while (Found(x,y)) { PieceNumber++; moves StartMove; StartMove.x=x; StartMove.y=y; MQue.push(StartMove); Marked[x][y]=true; while (not MQue.empty()) { moves CurrMove=MQue.front(); MQue.pop(); PutAll(CurrMove); } } cout << PieceNumber; } {code}\\ {code:title=cell2.cpp\|borderStyle=solid} #include <bits/stdc++.h>using namespace std; queue <int> X,Y; // Две очереди по одному числу bool Marked[8][8]; void StartProcess() { for (int i=0; i<8; i++) for (int j=0; j<8; j++) Marked[i][j]=false; int n; cin >> n; for (int i=0; i<n; i++) { int x,y; cin >> x >> y; Marked[x-1][y-1]=true; } } bool Found(int &x, int &y) { for (int i=0; i<8; i++) for (int j=0; j<8; j++) if (not Marked[i][j]) { x=i; y=j; return true;}; return false; } void PutAll(int x, int y) { int steps[4][2] = {{0,-1},{0,1},{-1,0},{1,0}}; for (int i=0; i<4; i++) { int Cx=x+steps[i][0]; int Cy=y+steps[i][1]; if ((Cx>=0) && (Cx<8) && (Cy>=0) && (Cy<8) && (not Marked[Cx][Cy])) {X.push(Cx); Y.push(Cy); Marked[Cx][Cy]=true;}; } } int main() { freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); StartProcess(); int PieceNumber=0,x,y; while (Found(x,y)) { PieceNumber++; X.push(x); Y.push(y); Marked[x][y]=true; while (not X.empty()) { x=X.front(); X.pop(); y=Y.front(); Y.pop(); PutAll(x,y); } } cout << PieceNumber; } {code}\\ |