这题用FIFO队列(queue)是不是会超时啊

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
queue<int>x,y;
int n,m,s,wx[13]={0,0,0,-1,1,0,0,-2,2,-1,1,-1,1},wy[13]={0,1,-1,0,0,2,-2,0,0,1,1,-1,-1};
bool map[110][110];
int main()
{
  //freopen("P1051.in","r",stdin);
  //freopen("P1051.out","w",stdout);
  cin>>n>>m;
  char a;
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=m;j++)
    {
      cin>>a;
      if(a=='#')
        map[i][j]=true;
    }
    scanf("\n");
    }
    for(int i=1;i<=n;i++)
      for(int j=1;j<=m;j++)
        if(map[i][j])
        {
          y.push(i);
          x.push(j);
          s++;
          while(1)
          {
            int X=x.front(),Y=y.front();
            map[Y][X]=false;
            for(int k=1;k<=12;k++)
              if(X+wx[k]>0 && X+wx[k]<=m && Y+wy[k]>0 && Y+wy[k]<=n && map[Y+wy[k]][X+wx[k]])
              {
                y.push(Y+wy[k]);
                x.push(X+wx[k]);
              }
            x.pop();
            y.pop();
            if(x.empty())
              break;
          }
          j++;
        }
    cout<<s;
  return 0;
}

真实案例……
(懒得手打队列……)

1 条评论

  • 1

信息

ID
1051
难度
4
分类
搜索 | 搜索与剪枝 点击显示
标签
递交数
6196
已通过
2431
通过率
39%
被复制
13
上传者