解題心得
看起來很麻煩,但基本上只要照著題目敘述做就好,最難的部分只有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);
}
}
}