Untitled
unknown
plain_text
2 years ago
2.7 kB
8
Indexable
#include <iostream> using namespace std; class Queue { private: int front, rear; int Data[100000000]; public: Queue(); void reset(); void enQueue(int value); int deQueue(); bool isEmpty(); }; Queue::Queue(){ front=rear=-1; } void Queue::reset(){ front=rear=-1; } void Queue::enQueue(int value){ Data[++rear]=value; } int Queue::deQueue(){ return Data[++front]; } bool Queue::isEmpty(){ return front==rear; } Queue rQueue, cQueue; int N, M, Map[100][100], visit[100][100]; int dx[]={0,0,-1,1}, dy[]={-1,1,0,0}; void BFS(int value){ for (int i=0; i<N; i++){ for (int j=0; j<M; j++){ visit[i][j]=false; } } for (int i=0; i<N; i++){ for (int j=0; j<M; j++){ if ((i==0 || i==N-1 || j==0 || j==M-1) && Map[i][j]<=value && visit[i][j]==false) { rQueue.reset(); cQueue.reset(); rQueue.enQueue(i); cQueue.enQueue(j); visit[i][j]=true; while (rQueue.isEmpty()==false){ int cr=rQueue.deQueue(); int cc=cQueue.deQueue(); for (int idx=0; idx<4; idx++){ int nr=cr+dx[idx]; int nc=cc+dy[idx]; if (nr>=0 && nr<N && nc>=0 && nc<M && Map[nr][nc]<=Map[cr][cc] && visit[nr][nc]==false) { rQueue.enQueue(nr); cQueue.enQueue(nc); visit[nr][nc]=true; } } } } } } } bool Split(){ int vung=0; for (int i=0; i<N; i++){ for (int j=0; j<M; j++){ if (visit[i][j]==false){ vung++; if (vung==2) return true; rQueue.reset(); cQueue.reset(); rQueue.enQueue(i); cQueue.enQueue(j); visit[i][j]=true; while (rQueue.isEmpty()==false){ int cr=rQueue.deQueue(); int cc=cQueue.deQueue(); for (int idx=0; idx<4; idx++){ int nr=cr+dx[idx]; int nc=cc+dy[idx]; if (nr>=0 && nr<N && nc>=0 && nc<M && visit[nr][nc]==false) { rQueue.enQueue(nr); cQueue.enQueue(nc); visit[nr][nc]=true; } } } } } } return false; } int main(){ freopen("input.txt", "r", stdin); int tc=1; while(1){ cin>>N>>M; if (N==0 && M==0) break; int level=0, Max=0; for (int i=0; i<N; i++){ for (int j=0; j<M; j++){ cin>>Map[i][j]; if (Map[i][j]>Max) Max=Map[i][j]; } } while(1){ if (level==Max){ cout<<"Case "<<tc<<": Island never splits."<<endl; break; } BFS(level); //Neu hon dao bi chia cat if (Split()==true){ cout<<"Case "<<tc<<": Island splits when ocean raises "<< level <<" feet."<<endl; break; } level++; } tc++; } return 0; }
Editor is loading...
Leave a Comment