[uva-352]The Seasonal War (dfs和bfs两种

来源:互联网 发布:发帖软件 编辑:程序博客网 时间:2024/05/20 22:28

求‘1’的连通块个数。
优化就是把搜过的1变成0。


没有内心戏
没有表情包
反正放假了


//uva 352 BFS by zhuhua//time limit: 3000 ms//AC time: 0 ms???#include <iostream>#include <cstdio>#include <queue>#include <utility>using namespace std;typedef pair<int,int> P;int dx[8]={1,1,0,-1,-1,-1,0,1};int dy[8]={0,1,1,1,0,-1,-1,-1};char Map[30][30];int n;void bfs(int x, int y){    queue<P>que;    Map[x][y]='0';    que.push(P(x,y));    while(!que.empty()){        P p=que.front();        que.pop();        for(int i=0;i<8;i++){            int x2=p.first+dx[i];            int y2=p.second+dy[i];            if(x2>=1&&x2<=n&&y2>=1&&y2<=n&&Map[x2][y2]=='1'){//cout<<"test"<<x2<<' '<<y2<<endl;                Map[x2][y2]='0';                que.push(P(x2,y2));            }        }    }}int main(){    int i,j,t,cnt;    t=1;    while(scanf("%d",&n)!=EOF)    {        //getchar();        for(i=1;i<=n;i++){            scanf(" %s",Map[i]+1);            }        cnt=0;        for(i=1;i<=n;i++)            for(j=1;j<=n;j++)        {            if(Map[i][j]=='1')            {                //cout<<i<<' '<<j<<endl;                cnt++;                bfs(i,j);            }        }        printf("Image number %d contains %d war eagles.\n",t++,cnt);    }    return 0;}

    //uva 352 DFS by zhuhua//time limit: 3000 ms//AC time: 0 ms???#include <iostream>#include <cstdio>#include <queue>#include <utility>using namespace std;typedef pair<int,int> P;int dx[8]={1,1,0,-1,-1,-1,0,1};int dy[8]={0,1,1,1,0,-1,-1,-1};char Map[30][30];int n;void dfs(int x, int y){    Map[x][y]='0';    for(int i=0;i<8;i++)    {        int x2=x+dx[i];        int y2=y+dy[i];        if(x2>=1&&x2<=n&&y2>=1&&y2<=n           &&Map[x2][y2]=='1')        {            dfs(x2,y2);        }    }}int main(){    int i,j,t,cnt;    t=1;    while(scanf("%d",&n)!=EOF)    {        //getchar();        for(i=1;i<=n;i++){            scanf(" %s",Map[i]+1);            }        cnt=0;        for(i=1;i<=n;i++)            for(j=1;j<=n;j++)        {            if(Map[i][j]=='1')            {                //cout<<i<<' '<<j<<endl;                cnt++;                dfs(i,j);            }        }        printf("Image number %d contains %d war eagles.\n",t++,cnt);    }    return 0;}