zoj1709 bfs

来源:互联网 发布:淘宝差评更改链接 编辑:程序博客网 时间:2024/06/07 04:46

@代表油田,*代表不是油田

八个方向中任意连在一起的都相当于同一块油田,不重复算

用bfs  dfs都可以

自我感觉水水哒结果因为行和列ij什么的越搞越晕一直跪哭

所以下面代码的n,m和题目是反的生气



#include<stdio.h>#include<string.h>#include<iostream>#include<queue>using namespace std;int po[8][2]={ {-1,1},{-1,-1},{1,-1},{1,1},{1,0},{0,1},{-1,0},{0,-1}};char oil[110][110];int n,m;struct node{    int x,y;    void init(int nx,int ny)    {        x=nx;        y=ny;    }};void bfs(int x,int y){    int nx,ny;    queue<node> q;    node a,b;    a.init(x,y);    q.push(a);    oil[y][x]='*';    while(!q.empty())    {        a=q.front();        q.pop();        int xx=a.x;        int yy=a.y;        for(int i=0;i<8;i++)        {            nx=xx+po[i][0];            ny=yy+po[i][1];            if(nx<=m&&ny<=n&&nx>=0&&ny>=0&&oil[ny][nx]=='@')            {                b.init(nx,ny);                q.push(b);                oil[ny][nx]='*';                //printf("nx,ny:  %d %d\n",nx,ny);            }        }    }}int main(){    int time;    while(scanf("%d%d",&n,&m)!=EOF)    {        if(m==0){return 0;}        sum=0;        memset(oil,0,sizeof(oil));        for(int i=0;i<n;i++)        {            for(int j=0;j<m;j++)                cin>>oil[i][j];        }        for(int i=0;i<n;i++)        {            for(int j=0;j<m;j++)                if(oil[i][j]=='@')                {                    time++;                    bfs(j,i);                }        }        printf("%d\n",time);    }    return 0;}


0 0
原创粉丝点击