码迷,mamicode.com
首页 > 其他好文 > 详细

Luogu P1331 海战

时间:2020-02-10 09:34:15      阅读:48      评论:0      收藏:0      [点我收藏+]

标签:printf   比较   需要   algorithm   amp   using   i+1   iostream   void   

solution

这个题其实还是比较暴力的
关键在于对于每个方阵的处理(其实还是对处理要求比较细的
首先我们得明确搜索的顺序:是从左上到右下的,所以有一些畸形的情况不需要考虑
我们只要check 每一个方正是不是满的就行了
时刻更新最大的节点处

#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF 2147483647
int R,C,Ans,s,ex,ey;
char a[1010][1010];
int u[]={1,-1,0,0};
int v[]={0,0,1,-1};
void dfs(int x,int y){
  for(int i=0;i<4;i++){
    int xx=x+u[i],yy=y+v[i];
    if(xx>0&&xx<=R&&yy>0&&yy<=C&&a[xx][yy]=='#'){
      s++;
      if(xx>ex||yy>ey)ex=xx,ey=yy;
      a[xx][yy]='.';
      dfs(xx,yy);
    }
  }
}
int main(){
  cin>>R>>C;
  for(int i=1;i<=R;i++)
    for(int j=1;j<=C;j++)
      cin>>a[i][j];
  for(int i=1;i<=R;i++)
    for(int j=1;j<=C;j++)
      if(a[i][j]=='#'){
    s=1;
    ex=i;
    ey=j;
    Ans++;
    a[i][j]='.';
    dfs(i,j);
    if(((ex-i+1)*(ey-j+1))!=s){
      cout<<"Bad placement."<<endl;
      return 0;
    }
      }
  printf("There are %d ships.\n",Ans);
  return 0;
}

Luogu P1331 海战

标签:printf   比较   需要   algorithm   amp   using   i+1   iostream   void   

原文地址:https://www.cnblogs.com/KingBenQi/p/12289662.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!