题目大意:在地图中找到全部生还的船,船只能是1*1到1*(n/2)的直线,只要没被全部击沉就视为生还
解题思想:找到关键点(“x”)以后bps,他说了两个船不能重叠活相邻,减少很多难度
代码:
#include <stack>
#include <cstdio>
#include <iostream>
using namespace std;
char map[110][110];
int n;
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
void dfs(int i,int j)
{
stack<pair<int,int> >S;
S.push(make_pair(i,j));
while(!S.empty())
{
pair<int, int>P=S.top();
S.pop();i=P.first;j=P.second;
if(i<0||i>=n)continue;
if(j<0||j>=n)continue;
if (map[i][j]=='.')continue;
map[i][j]='.';
for(int zx=0;zx<4;zx++)S.push(make_pair(i+dx[zx],j+dy[zx]));
}
}
int main()
{
int T;
cin>>T;
for(int qw=1;qw<=T;qw++)
{
cin>>n;
int ans=0;
for(int i=0;i<n;i++)scanf("%s", map[i]);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if (map[i][j]=='x')
{
ans++;
dfs(i,j);
}
cout<<"Case "<<qw<<": "<<ans<<endl;
}
return 0;
}