解題心得
看起來很麻煩,但基本上只要照著題目敘述做就好,最難的部分只有DFS。
程式碼
#include <iostream> using namespace std; char table[101][101]; int m, n; void fill(int x, int y, char c, char currentColor) { if(currentColor==c) return; table[y][x]=c; if(x>=2 && table[y][x-1]==currentColor) fill(x-1,y,c,currentColor); if(x<m && table[y][x+1]==currentColor) fill(x+1,y,c,currentColor); if(y>=2 && table[y-1][x]==currentColor) fill(x,y-1,c,currentColor); if(y<n && table[y+1][x]==currentColor) fill(x,y+1,c,currentColor); } int main() { char cmd,c; int x1,x2,y1,y2; string name,s; while(cin>>cmd) { if(cmd=='I') { cin>>m>>n; for(int i=0;i<=n;i++) for(int j=0;j<=m;j++) table[i][j]='O'; } else if(cmd=='L') { cin>>x1>>y1>>c; table[y1][x1]=c; } else if(cmd=='S') { cin>>name; cout<<name<<endl; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) cout<<table[i][j]; cout<<endl; } } else if(cmd=='F') { cin>>x1>>y1>>c; fill(x1,y1,c,table[y1][x1]); } else if(cmd=='V') { cin>>x1>>y1>>y2>>c; if(y1>y2) swap(y1,y2); for(int i=y1;i<=y2;i++) table[i][x1]=c; } else if(cmd=='H') { cin>>x1>>x2>>y1>>c; if(x1>x2) swap(x1,x2); for(int i=x1;i<=x2;i++) table[y1][i]=c; } else if(cmd=='K') { cin>>x1>>y1>>x2>>y2>>c; for(int i=y1;i<=y2;i++) for(int j=x1;j<=x2;j++) table[i][j]=c; } else if(cmd=='C') { for(int i=0;i<101;i++) for(int j=0;j<101;j++) table[i][j]='O'; } else if(cmd=='X') break; else { cin.ignore(); getline(cin,s); } } }
沒有留言:
張貼留言