nyoj1237 最大岛屿 dfs求连通图

来源:互联网 发布:股票数据分析流派 编辑:程序博客网 时间:2024/05/16 12:40

没难度,字符串处理,getchar()吃掉回车,基本没什么难度,没啥好说的

#include<iostream>#include<iomanip>#include<cstdio>#include<cstring>#include<sstream>#include<stack>#include<queue>#include<fstream>#include<algorithm>#include<map>#include<set>#include<vector>#include<functional>#include<cmath>#define CLR(x) memset(x,0,sizeof(x))#define SETMAX(x) memset(x,0x3f,sizeof(x))#define SETNO(x) memset(x,-1,sizeof(x))#define eps 3e-12#define pow2(x) ((x)*(x))#define forto(i,n) for(int i=0;i<n;i++)#define for1to(i,n) for(int i=1;i<=n;i++)#define VI vector<int>using namespace std;const double PI=acos(-1.0);#define INF 0x3f3f3f3f#define NINF 0xbfffffffint map1[505][505];int max1;int sum;int m,n,t;char str;void dfs(int x,int y){    if(0<=x&&x<n&&0<=y&&y<m&&map1[x][y]==1)    {        sum++;        map1[x][y]=0;        dfs(x-1,y+1);        dfs(x,y+1);        dfs(x+1,y+1);        dfs(x+1,y);        dfs(x+1,y-1);        dfs(x,y-1);        dfs(x-1,y-1);        dfs(x-1,y);    }}int main(){    while(cin>>m>>n>>t)    {        int dao=0;        sum=0;        max1=0;       forto(i,m)        {            getchar();            for(int j=0;j<n;)            {                scanf("%c",&str);                if(str!=' ')//过滤空格                {                    map1[j++][i]=str-'0';                }            }        }        forto(i,m)        {            forto(j,n)            {                if(map1[j][i]==1)                {                    dfs(j,i);                    dao++;                }                max1=max(sum,max1);                sum=0;            }        }        cout<<dao<<" "<<max1*t<<endl;        return 0;    }}


0 0
原创粉丝点击