#include <bits/stdc++.h>
using namespace std;
char a[110][110];
int n,m;
int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};
void dfs(int,int);
int main()
{
int ttttt;
cin>>ttttt;
while(ttttt--)
{
cin>>n>>m;
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=m;j++)
{
cin>>a[i][j];
}
}
for(int i = 1;i<=n;i++)
if(a[i][1]=='O') dfs(i,1);
for(int i = 1;i<=n;i++)
if(a[i][m]=='O') dfs(i,m);
for(int i = 1;i<=m;i++)
if(a[1][i]=='O') dfs(1,i);
for(int i = 1;i<=m;i++)
if(a[n][i]=='O') dfs(n,i);
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=m;j++)
{
if(a[i][j]=='O') a[i][j] = 'X';
if(a[i][j]=='1') a[i][j] = 'O';
cout<<a[i][j];
}
cout<<endl;
}
}
return 0;
}
void dfs(int x,int y)
{
a[x][y] = '1';
for(int i = 0;i<4;i++)
{
int tx = x+dx[i];
int ty = y+dy[i];
if(tx>1&&tx<=n&&ty>=1&&ty<=m&&a[tx][ty]=='O')
{
dfs(tx,ty);
}
}
return;
}
卫星照片
cpp复制代码
#include <bits/stdc++.h>
using namespace std;
char a[110][110];
int n,m;
int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};
int c1,c2,cnt;
int sx,sy,ex,ey;
void dfs(int,int);
int main()
{
cin>>n>>m;
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=m;j++)
{
cin>>a[i][j];
}
}
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=m;j++)
{
if(a[i][j]=='#')
{
cnt = 0;
sx = i;
ex = i;
sy = j;
ey = j;
dfs(i,j);
int mianji = (ex-sx+1)*(ey-sy+1);
if(cnt==mianji) c1++;
else c2++;
// cout<<i<<" "<<j<<" "<<c1<<" "<<c2<<" "<<cnt<<endl;
}
}
}
cout<<c1<<endl<<c2;
return 0;
}
void dfs(int x,int y)
{
cnt++;
a[x][y] = '.';
sx = min(x,sx);
ex = max(x,ex);
sy = min(y,sy);
ey = max(y,ey);
for(int i = 0;i<4;i++)
{
int tx = x+dx[i];
int ty = y+dy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&a[tx][ty]=='#')
{
dfs(tx,ty);
}
}
return;
}
城堡问题
cpp复制代码
#include <bits/stdc++.h>
using namespace std;
int a[110][110];
int n,m;
int cnt;
int ma;
int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};
//west1,north2,east4,south8
int dfs(int,int);
int main()
{
cin>>n>>m;
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=m;j++)
{
cin>>a[i][j];
string ch;
int t = a[i][j];
while(t!=0)
{
ch = (char)(t%2+48)+ch;
t /= 2;
}
a[i][j] = stoi(ch);
}
}
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=m;j++)
{
if(a[i][j]>0)
{
cnt++;
ma = max(ma,dfs(i,j));
}
}
}
cout<<cnt<<endl<<ma;
return 0;
}
int dfs(int x,int y)
{
a[x][y] = 0-cnt;
int sum = 1;
for(int i = 0;i<4;i++)
{
int tx = x+dx[i];
int ty = y+dy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&a[tx][ty]>0)
{
if(a[tx][ty]/100%10==0&&i==2) sum += dfs(tx,ty);
if(a[tx][ty]/1000%10==0&&i==3) sum += dfs(tx,ty);
if(a[tx][ty]/1%10==0&&i==0) sum += dfs(tx,ty);
if(a[tx][ty]/10%10==0&&i==1) sum += dfs(tx,ty);
}
}
return sum;
}