简单地DFS
1.读入,将字符串转化成数组
2.判断有没有两艘船接触
3.如果没有,dfs求出有几艘船
4.输出
详见代码:
#include<bits/stdc++.h>
using namespace std;
int r,c,sum=0,d[5][3];
int f[1100][1100],flag=1;
void init()
{
d[1][1]=0;d[1][2]=1;d[2][1]=1;d[2][2]=0;d[3][1]=0;d[3][2]=-1;d[4][1]=-1;d[4][2]=0;
}
void dfs(int x,int y)
{
for(int i=1;i<=4;i++)
if(f[x+d[i][1]][y+d[i][2]])
{
f[x+d[i][1]][y+d[i][2]]=0;
dfs(x+d[i][1],y+d[i][2]);
}
}
int main()
{
char x;
memset(f,0,sizeof(f));
cin>>r>>c;
init() ;
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
{
cin>>x;
if(x=='.')f[i][j]=0;
else f[i][j]=1;
}
for(int i=1;i<=r-1;i++) //判断有没有Bad placement.
for(int j=1;j<=c-1;j++)
{
int val=0;
if(f[i][j]) val++;
if(f[i+1][j]) val++;
if(f[i][j+1]) val++;
if(f[i+1][j+1]) val++;
if(val==3) flag=0;//不能组成正方形
}
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
if(f[i][j])
{
dfs(i,j); sum++;
}
if(flag)cout<<"There are "<<sum<<" ships.";
else cout<<"Bad placement.";
}
本文介绍了一种使用深度优先搜索(DFS)算法来解析二维数组中独立船只数量的方法。通过输入一个由字符组成的矩阵,该算法能够判断是否存在不合理的船只布局,并计算出合法布局下独立船只的具体数量。
1335

被折叠的 条评论
为什么被折叠?



