HRBUST1143.泉水

来源:互联网 发布:c语言判断鸡蛋个数 编辑:程序博客网 时间:2024/04/29 16:59


BFS解法:


#include<stdio.h>#include<queue>#include<string.h>using namespace std;struct Point{    int x;    int y;} tmp,tmp2;queue<Point>q;int vis[1005][1005];int a[1005][1005];int d[4][2]= {0,1,0,-1,1,0,-1,0};//四个方向int i,j;int main(){    int n,m,p1,p2;    while(scanf("%d%d%d%d",&n,&m,&p1,&p2)!=EOF)    {        int ans=1;        for(i=1; i<=n; i++)            for(j=1; j<=m; j++)                scanf("%d",&a[i][j]);        while(!q.empty())//队列清空        {            q.pop();        }        memset(vis,0,sizeof(vis));//数组清空        tmp.x = p1;        tmp.y = p2;        vis[tmp.x-1][tmp.y-1]=1;        q.push(tmp);        while(!q.empty())        {            tmp = q.front();            q.pop();            for(i=0; i<4; i++)//各方向搜索            {                tmp2.x = tmp.x + d[i][0];                tmp2.y = tmp.y + d[i][1];                if(a[tmp2.x][tmp2.y]<=a[p1][p2] && tmp2.x>=1 && tmp2.x<=n && tmp2.y>=1 && tmp2.y<=m && !vis[tmp2.x-1][tmp2.y-1])//入队条件                {                    ans++;//每淹没一点,答案加一                    vis[tmp2.x-1][tmp2.y-1] = 1;//标记淹没点                    a[tmp2.x][tmp2.y] = a[p1][p2];//淹没点与泉眼高度一致                    q.push(tmp2);                }            }        }        printf("%d\n", ans);    }    return 0;}

DFS解法:


#include<stdio.h>#include<string.h>#include<iostream>using namespace std;int n,m,p1,p2;int vis[1005][1005];int a[1005][1005];int i,j,ans;int d[4][2]= {0,1, 0,-1, 1,0, -1,0};void DFS(int x,int y){    if(vis[x][y])    {        return ;    }    if(!vis[x][y])    {        ans++;        vis[x][y]=1;    }    int i,x1,y1;    for(i=0; i<4; i++)    {        x1=x+d[i][0];        y1=y+d[i][1];        if(x1>=1 && x1<=n && y1>=1 && y1<=m && a[x1][y1]<=a[p1][p2])        {            DFS(x1,y1);//通过递归实现深搜        }    }    return ;}int main(){    while(scanf("%d%d%d%d",&n,&m,&p1,&p2) != EOF)    {        for(i=1; i<=n; i++)        {            for(j=1; j<=m; j++)            {                scanf("%d",&a[i][j]);            }        }        memset(vis,0,sizeof(vis));        ans=0;        DFS(p1,p2);        printf("%d\n",ans);    }}



原创粉丝点击