zoukankan      html  css  js  c++  java
  • Luogu P1331 海战

    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.
    ",Ans);
      return 0;
    }
    
    
  • 相关阅读:
    Java SE
    Java SE
    Java SE
    Java SE
    Vocabulary: dockyard
    Vocabulary: Intercept
    Java SE
    MVG
    相关学习
    相机开发
  • 原文地址:https://www.cnblogs.com/KingBenQi/p/12289662.html
Copyright © 2011-2022 走看看