zoukankan      html  css  js  c++  java
  • codevs 1536 海战

    所谓灌水法?其实就是一个bfs了。

    注意此题要求判断是否合法,只需要记录经过的点数,判断它是否是矩形的面积即可。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<cmath>
    using namespace std;
    bool vis[1005][1005];
    int n,m,map[1005][1005],flag=0,cnt=0;
    int dx[]={0,0,1,0,-1},dy[]={0,1,0,-1,0};
    struct code
    {
    int x,y;
    };
    queue <code> q;
    char s[1005];
    bool judge(int x,int y)
    {
    if ((x>=1) && (x<=n) && (y>=1) && (y<=m) && (map[x][y]==1) && (vis[x][y]==false))
    return true;
    return false;
    }
    void bfs(int bx,int by)
    {
    int cc=1,maxx=bx,maxy=by;
    while (!q.empty())
    q.pop();
    code begin;
    begin.x=bx;begin.y=by;
    q.push(begin);
    vis[bx][by]=true;
    while (!q.empty())
    {
    code head=q.front();
    q.pop();
    for (int i=1;i<=4;i++)
    {
    if (judge(head.x+dx[i],head.y+dy[i])==true)
    {
    cc++;
    maxx=max(maxx,head.x+dx[i]);
    maxy=max(maxy,head.y+dy[i]);
    code now;
    now.x=head.x+dx[i];now.y=head.y+dy[i];
    vis[now.x][now.y]=true;
    q.push(now);
    }
    }
    }
    if ((maxx-bx+1)*(maxy-by+1)!=cc) flag=1;
    }
    int main()
    {
    memset(vis,false,sizeof(vis));
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++)
    {
    scanf("%s",s);
    for (int j=0;j<m;j++)
    {
    if (s[j]=='.') map[i][j+1]=0;
    else map[i][j+1]=1;
    }
    }
    for (int i=1;i<=n;i++)
    for (int j=1;j<=m;j++)
    if ((vis[i][j]==false) && (map[i][j]==1))
    {
    cnt++;
    bfs(i,j);
    if (flag==1)
    {
    printf("Bad placement. ");
    return 0;
    }
    }
    printf("There are %d ships. ",cnt);
    return 0;
    }

  • 相关阅读:
    emqttd的启动脚本
    vue2的全局变量
    windows 上优雅的安装 node 和 npm
    Intent数据清理
    android 滑动刷新的实验总结
    Android 音量键拦截
    多进程通讯笔记 android aidl
    perl-Thread-Queue for openwrt
    openwrt的编译环境
    高德地图白屏的问题
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/5179405.html
Copyright © 2011-2022 走看看