POJ 1979 Red and Black(BFS)

来源:互联网 发布:python 计算技术指标 编辑:程序博客网 时间:2024/05/15 16:24

题意:有一个H*W的矩阵,'.'表示可以走的地方,'#'表示不能走的地方,你最初在'@'的地方,输出你最多可以到达的地方数。

思路:直接BFS即可。

注意:当没有可以走的地方时,输出1。

#include<stdio.h>#include<string.h>int w,h,ans,me_x,me_y;char word[100][100];int number[100][100];int front1,rear;int dx[4]={-1,1,0,0};//上下左右int dy[4]={0,0,-1,1};struct node{    int x,y;}q[1000];void bfs(int xx,int yy){    int i,j;    q[front1].x=xx;    q[front1].y=yy;    while(front1<rear)    {        for(i=0;i<4;i++)//搜索可能有的路径        {            int a=dx[i]+q[front1].x;            int b=dy[i]+q[front1].y;            if(a<=0||b<=0||a>h||b>w||!number[a][b])//已到边界                continue;            else            {                number[a][b]=0;                q[rear].x=a;                q[rear].y=b;                rear++;//入队                ans++;            }        }        front1++;//出队    }}int main(){    //freopen("in.txt","r",stdin);    int i,j;    while(scanf("%d%d",&w,&h))    {        front1=0,rear=1;        getchar();        ans=0;        memset(number,0,sizeof(number));//当为0时表示无法走        if(w==0&&h==0)            break;        for(i=1;i<=h;i++)        {            for(j=1;j<=w;j++)            {                scanf("%c",&word[i][j]);                if(word[i][j]=='.')                    number[i][j]=1;                else if(word[i][j]=='@')                {                    number[i][j]=1;                    me_x=i;                    me_y=j;                }            }            getchar();        }        bfs(me_x,me_y);        if(ans==0)//如果除了该点之外都无法到达要特判            ans=1;        printf("%d\n",ans);    }    return 0;}


原创粉丝点击