本文主要是介绍poj-3051 Satellite Photographs,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目来源:http://poj.org/problem?id=3051
直接广度搜索 水~ 练手
#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
typedef struct
{int i;int j;
}point;
point P[80010];
int W,H;
char a[1010][90];
int bfs(int i,int j)
{a[i][j]='.';P[0].i=i;P[0].j=j;int l=-1,r=0;while(l!=r){l++;if(a[P[l].i][P[l].j+1]=='*'){r++;P[r].i=P[l].i;P[r].j=P[l].j+1;a[P[r].i][P[r].j]='.';}if(a[P[l].i][P[l].j-1]=='*'){r++;P[r].i=P[l].i;P[r].j=P[l].j-1;a[P[r].i][P[r].j]='.';}if(a[P[l].i+1][P[l].j]=='*'){r++;P[r].i=P[l].i+1;P[r].j=P[l].j;a[P[r].i][P[r].j]='.';}if(a[P[l].i-1][P[l].j]=='*'){r++;P[r].i=P[l].i-1;P[r].j=P[l].j;a[P[r].i][P[r].j]='.';}}return r+1;
}
int main()
{while(~scanf("%d%d",&W,&H)){int ans=0;for(int i=0; i<=H+1; i++)for(int j=0; j<=W+1; j++)a[i][j]='.';for(int i=1; i<=H; i++){scanf("%s",a[i]+1);a[i][W+1]='.';}for(int i=1; i<=H; i++){for(int j=1; j<=W; j++){if(a[i][j]=='*'){int sum=bfs(i,j);if(ans<sum) ans=sum;}}}printf("%d\n",ans);}
}
这篇关于poj-3051 Satellite Photographs的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!