Lake Counting POJ

来源:互联网 发布:法兰克福和慕尼黑 知乎 编辑:程序博客网 时间:2024/06/05 07:26
#include<iostream>//深度优先进行遍历#include<stdio.h>using namespace std;char t[105][105];int n,m;void dfs(int x,int y){    t[x][y]='.';    int nx,ny;    for(int dx=-1;dx<=1;dx++)    {        for(int dy=-1;dy<=1;dy++)        {            nx=dx+x;            ny=dy+y;            if(0<=nx&&nx<n&&0<=ny&&ny<m&&t[nx][ny]=='W')            {                dfs(nx,ny);            }        }    }}int main(){    char c;    int num=0;    scanf("%d%d%c",&n,&m,&c);    for(int i=0;i<n;i++)    {        for(int j=0;j<m;j++)        {            scanf("%c",&t[i][j]);        }        scanf("%c",&c);    }    for(int i=0;i<n;i++)    {        for(int j=0;j<m;j++)        {            if(t[i][j]=='W')            {                dfs(i,j);                num++;            }        }    }    printf("%d\n",num);    return 0;}
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.

..W.......W.

//这个是10*12的测试数据

#include<iostream>//广度优先进行遍历using namespace std;#include<stdio.h>#include<queue>typedef pair<int ,int> P;//第一个叫做first,第二个叫做secondqueue<P> que;char Map[20][20];int N,M;int bfs(int x,int y){    Map[x][y]='.';    que.push(P(x,y));    while(que.size())    {        P p=que.front();//这个是他的第一个        que.pop();        for(int dx=-1;dx<=1;dx++)        {            for(int dy=-1;dy<=1;dy++)            {                int nx=p.first+dx;                int ny=p.second+dy;                if(0<nx&&nx<=N&&0<ny&&ny<=M&&Map[nx][ny]=='W')                {                    Map[nx][ny]='.';                    que.push(P(nx,ny));//把这个点压进去                }            }        }    }}int main(){    int sum=0;    char cx;    scanf("%d%d%c",&N,&M,&cx);    for(int i=1;i<=N;i++)//输入地图信息        {            for(int j=1;j<=M;j++)                {                    scanf("%c",&Map[i][j]);                }            scanf("%c",&cx);        }    for(int i=1;i<=N;i++)    {        for(int j=1;j<=M;j++)        {            if(Map[i][j]=='W')            {                sum++;                bfs(i,j);//这个就是对其进行遍历            }        }    }    printf("%d\n",sum);    return 0;}


原创粉丝点击