【poj3620】Avoid The Lakes

这里写图片描述
这里写图片描述

求一个坐标区域内,在给出的几点坐标中上下左右相邻的个数的最大值。

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<algorithm>
  4. using namespace std;
  5. const int N = 105;
  6. int map[N][N];
  7. int vis[N][N];
  8. int n,m,k,ans;
  9. int dir[4][2] = {
  10. 1, 0, -1, 0, 0, -1, 0, 1};
  11. bool check(int x, int y) {
  12. if(x < 1 || x > n || y < 1 || y > m)
  13. return 0;
  14. if(map[x][y] == 0)
  15. return 0;
  16. if(vis[x][y] == 1)
  17. return 0;
  18. return 1;
  19. }
  20. void dfs(int x,int y) {
  21. ans++;
  22. vis[x][y]=1;
  23. for(int l=0; l<4; l++) {
  24. int nx = x + dir[l][0];
  25. int ny = y + dir[l][1];
  26. if(check(nx, ny)) {
  27. dfs(nx,ny);
  28. }
  29. }
  30. }
  31. int main() {
  32. while(scanf("%d%d%d",&n,&m,&k)!=EOF) {
  33. int x,y;
  34. memset(map,0,sizeof(map));
  35. for(int l=0; l<k; l++) {
  36. scanf("%d%d",&x,&y);
  37. map[x][y]=1;
  38. }
  39. int sum=0;
  40. memset(vis,0,sizeof(vis));
  41. for(int i=1; i<=n; i++) {
  42. for(int j=1; j<=m; j++) {
  43. ans=0;
  44. if(map[i][j]) {
  45. dfs(i,j);
  46. sum=sum>ans?sum:ans;
  47. }
  48. }
  49. }
  50. printf("%d\n",sum);
  51. }
  52. return 0;
  53. }

http://poj.org/problem?id=3620

发表评论

表情:
评论列表 (有 0 条评论,80人围观)

还没有评论,来说两句吧...

相关阅读