100114B

bfs

#include<iostream>
#include<queue>
#include<cstring>
#include<cstdio>
using namespace std;
const int dx[]={-1,1,0,0},dy[]={0,0,-1,1};
queue<int>q;
int n,m,ans,x,y;
int used[1010][1010];
char board[1010][1010];
void bfs(int a,int b)
{
    q.push(a);q.push(b);
    used[a][b]=1;
    while(!q.empty())
    {
        int x=q.front();q.pop();
        int y=q.front();q.pop();
        for(int i=0;i<4;i++)
        {
            int xx=x+dx[i];
            int yy=y+dy[i];
            if(board[xx][yy]=='-')
            {
                ans++;break;
            }
        }        
        for(int i=0;i<4;i++)
        {
            int xx=x+dx[i],yy=y+dy[i];
            if(!used[xx][yy]&&board[xx][yy]=='+')
            {
                q.push(xx);q.push(yy);used[xx][yy]=1;
            }
        }
    }
}
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    cin>>n>>m;
    memset(used,1,sizeof(used));
    memset(board,'1',sizeof(board));
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            cin>>board[i][j];
            used[i][j]=0;
            if(board[i][j]=='+')
            {
                x=i;y=j;
            }
        }
    bfs(x,y);
    cout<<ans<<endl;
    fclose(stdin);
    fclose(stdout);
    return 0;
}
原文地址:https://www.cnblogs.com/19992147orz/p/6005916.html