1 条题解

  • 0
    @ 2018-10-29 13:11:50

    建议将此题做为广搜题
    #include<bits/stdc++.h>
    using namespace std;
    bool nex[1001][1001];
    int res=0;
    bool b[1001][1001];
    int pd(int i,int j) //如思路所述的判断两个矩阵的
    {
    if (nex[i][j]==1)
    {
    if (nex[i+1][j-1]==1)
    {
    if (nex[i+1][j]==0 || nex[i][j-1]==0)
    {
    return 1;
    }
    }
    if (nex[i+1][j+1]==1)
    {
    if (nex[i+1][j]==0 || nex[i][j+1]==0)
    {
    return 1;
    }
    }
    if (nex[i-1][j-1]==1)
    {
    if (nex[i][j-1]==0 || nex[i-1][j]==0)
    {
    return 1;
    }
    }
    if (nex[i-1][j+1]==1)
    {
    if (nex[i-1][j]==0 || nex[i][j+1]==0)
    {
    return 1;
    }
    }
    }
    return 0;
    }
    int nexxt[4][2]={{0,1},{1,0}};
    //int ue[100001];
    int hx[1000001];
    int hy[1000001];
    int n,k;
    //bool b[7777][7777];
    void bfs(int x,int y)
    {
    int head=0,tail=1;
    //nex[x][y]=0;
    b[x][y]=1;
    hx[tail]=x;
    hy[tail]=y;
    while(head<tail)
    {
    head++;
    for(int i=0;i<2;i++)
    {
    int tx=hx[head]+nexxt[i][0];
    int ty=hy[head]+nexxt[i][1];
    if(pd(tx,ty)){
    cout<<"Bad placement.";
    exit(0);
    }
    if(tx<0||tx>=n||ty<0||ty>=k)continue;

    if(nex[tx][ty]==1&&b[tx][ty]==0)
    {

    tail++;
    hx[tail]=tx;
    hy[tail]=ty;
    //ue[tail]=ue[head]+1;
    nex[tx][ty]=1;
    b[tx][ty]=1;
    }
    }
    }
    }
    int main()
    {

    cin>>n>>k;
    for(int i=0;i<n;i++)
    for(int j=0;j<k;j++)
    {
    char s;
    s=getchar();
    while(s=='\n')s=getchar();
    //s=getchar();
    if(s=='#')
    nex[i][j]=1;
    }
    for(int i=0;i<n;i++)
    {
    for(int j=0;j<k;j++)
    {
    if(nex[i][j]==1&&b[i][j]==0)
    {
    res++;
    // cout<<i<<j<<endl;
    bfs(i,j);
    }
    }
    }
    cout<<"There are "<<res<<" ships.";
    //getchar();
    // getchar();
    }

  • 1

信息

难度
9
分类
(无)
标签
递交数
2
已通过
2
通过率
100%
上传者