/** Ivo Karagyozov */ #include #include #include #include using namespace std; int n, p; struct node { int i, j; }; int board[105][105], ind=0, par[105][105]; node potok[10005]; bool isInOneComponent(node s, node e, int num) { queue q; q.push(s); while(!q.empty()) { int i=q.front().i, j=q.front().j; if(i==e.i && j==e.j) { par[s.i][s.j]=0; return true; } if(board[i][j]==0)board[i][j]=-2; node k; k.i=i; k.j=j; q.pop(); if(i+1=0 && (board[i-1][j]==0 || board[i-1][j]==num)) { k.i--; q.push(k); par[k.i][k.j]=3; } k.i=i; if(j-1>=0 && (board[i][j-1]==0 || board[i][j-1]==num)) { k.j--; q.push(k); par[k.i][k.j]=2; } k.j=j; } return false; } void bfs(node s, node e, int num) { int i=e.i, j=e.j, ie=s.i, je=s.j; board[i][j]=num; potok[ind].i=i; potok[ind].j=j; ind++; while(i!=ie || j!=je) { if(par[i][j]==1) { if(j-1>=0 && board[i][j-1]==0 && board[i-1][j-1]==0 && par[i-1][j]!=4) { board[i][j-1]=num; potok[ind].i=i; potok[ind].j=j-1; ind++; if(j-2>=0 && board[i][j-2]==0 && board[i-1][j-2]==0) { board[i][j-2]=num; potok[ind].i=i; potok[ind].j=j-2; ind++; if(j-3>=0 && board[i][j-3]==0 && board[i-1][j-3]==0) { board[i][j-3]=num; potok[ind].i=i; potok[ind].j=j-3; ind++; if(j-4>=0 && board[i][j-4]==0 && board[i-1][j-4]==0) { board[i][j-4]=num; potok[ind].i=i; potok[ind].j=j-4; ind++; board[i-1][j-4]=num; potok[ind].i=i-1; potok[ind].j=j-4; ind++; } board[i-1][j-3]=num; potok[ind].i=i-1; potok[ind].j=j-3; ind++; } board[i-1][j-2]=num; potok[ind].i=i-1; potok[ind].j=j-2; ind++; } board[i-1][j-1]=num; potok[ind].i=i-1; potok[ind].j=j-1; ind++; } else if(j+1=0) { if(j-1>=0 && board[i][j-1]==num && board[i-1][j-1]==num && board[i-2][j-1]==0 && board[i-2][j]==0) { board[i-2][j-1]=num; potok[ind].i=i-2; potok[ind].j=j-1; ind++; board[i-2][j]=num; potok[ind].i=i-2; potok[ind].j=j; ind++; } else if(j+1=0 && board[i-1][j]==0 && board[i-1][j+1]==0 && par[i][j+1]!=1) { board[i-1][j]=num; potok[ind].i=i-1; potok[ind].j=j; ind++; if(i-2>=0 && board[i-2][j]==0 && board[i-2][j+1]==0) { board[i-2][j]=num; potok[ind].i=i-2; potok[ind].j=j; ind++; if(i-3>=0 && board[i-3][j]==0 && board[i-3][j+1]==0) { board[i-3][j]=num; potok[ind].i=i-3; potok[ind].j=j; ind++; if(i-4>=0 && board[i-4][j]==0 && board[i-4][j+1]==0) { board[i-4][j]=num; potok[ind].i=i-4; potok[ind].j=j; ind++; board[i-4][j+1]=num; potok[ind].i=i-4; potok[ind].j=j+1; ind++; } board[i-3][j+1]=num; potok[ind].i=i-3; potok[ind].j=j+1; ind++; } board[i-2][j+1]=num; potok[ind].i=i-2; potok[ind].j=j+1; ind++; } board[i-1][j+1]=num; potok[ind].i=i-1; potok[ind].j=j+1; ind++; } else if(i+1=0 && board[i-1][j]==num && board[i-1][j+1]==num && board[i-1][j+2]==0 && board[i][j+2]==0) { board[i-1][j+2]=num; potok[ind].i=i-1; potok[ind].j=j+2; ind++; board[i][j+2]=num; potok[ind].i=i; potok[ind].j=j+2; ind++; } else if(i+1=0 && board[i][j-1]==0 && board[i+1][j-1]==0 && par[i+1][j]!=4) { board[i][j-1]=num; potok[ind].i=i; potok[ind].j=j-1; ind++; if(j-2>=0 && board[i][j-2]==0 && board[i+1][j-2]==0) { board[i][j-2]=num; potok[ind].i=i; potok[ind].j=j-2; ind++; if(j-3>=0 && board[i][j-3]==0 && board[i+1][j-3]==0) { board[i][j-3]=num; potok[ind].i=i; potok[ind].j=j-3; ind++; if(j-4>=0 && board[i][j-4]==0 && board[i+1][j-4]==0) { board[i][j-4]=num; potok[ind].i=i; potok[ind].j=j-4; ind++; board[i+1][j-4]=num; potok[ind].i=i+1; potok[ind].j=j-4; ind++; } board[i+1][j-3]=num; potok[ind].i=i+1; potok[ind].j=j-3; ind++; } board[i+1][j-2]=num; potok[ind].i=i+1; potok[ind].j=j-2; ind++; } board[i+1][j-1]=num; potok[ind].i=i+1; potok[ind].j=j-1; ind++; } else if(j+1=0 && board[i][j-1]==num && board[i+1][j-1]==num && board[i+2][j-1]==0 && board[i+2][j]==0) { board[i+2][j-1]=num; potok[ind].i=i+2; potok[ind].j=j-1; ind++; board[i+2][j]=num; potok[ind].i=i+2; potok[ind].j=j; ind++; } else if(j+1=0 && board[i-1][j]==0 && board[i-1][j-1]==0 && par[i][j-1]!=1) { board[i-1][j]=num; potok[ind].i=i-1; potok[ind].j=j; ind++; if(i-2>=0 && board[i-2][j]==0 && board[i-2][j-1]==0) { board[i-2][j]=num; potok[ind].i=i-2; potok[ind].j=j; ind++; if(i-3>=0 && board[i-3][j]==0 && board[i-3][j-1]==0) { board[i-3][j]=num; potok[ind].i=i-3; potok[ind].j=j; ind++; if(i-4>=0 && board[i-4][j]==0 && board[i-4][j-1]==0) { board[i-4][j]=num; potok[ind].i=i-4; potok[ind].j=j; ind++; board[i-4][j-1]=num; potok[ind].i=i-4; potok[ind].j=j-1; ind++; } board[i-3][j-1]=num; potok[ind].i=i-3; potok[ind].j=j-1; ind++; } board[i-2][j-1]=num; potok[ind].i=i-2; potok[ind].j=j-1; ind++; } board[i-1][j-1]=num; potok[ind].i=i-1; potok[ind].j=j-1; ind++; } else if(i+1=0) { if(i-1>=0 && board[i-1][j]==num && board[i-1][j-1]==num && board[i-1][j-2]==0 && board[i][j-2]==0) { board[i-1][j-2]=num; potok[ind].i=i-1; potok[ind].j=j-2; ind++; board[i][j-2]=num; potok[ind].i=i; potok[ind].j=j-2; ind++; } else if(i+1>n>>p; for(int i=0; i>is[i]>>js[i]>>ie[i]>>je[i]; board[is[i]][js[i]]=i+1; board[ie[i]][je[i]]=i+1; } int b; cin>>b; for(int a=0; a>i>>j; board[i][j]=-1; } for(int i=0; i