zoukankan      html  css  js  c++  java
  • poj 1164 dfs 位运算

    好像是第一次用位运算。。。得习惯二进制。。

    还有就是p=0的时候。。。

    View Code
     1 // File Name: 1164.cpp
     2 // Author: Missa
     3 // Created Time: 2013/2/2 星期六 23:08:26
     4 
     5 #include<iostream>
     6 #include<cstdio>
     7 #include<cstring>
     8 #include<algorithm>
     9 #include<cmath>
    10 #include<queue>
    11 #include<stack>
    12 #include<string>
    13 #include<vector>
    14 #include<cstdlib>
    15 #include<map>
    16 using namespace std;
    17 
    18 const int maxn = 55;
    19 
    20 int ma[maxn][maxn];
    21 int ans,large,tmp;
    22 int n,m;
    23 bool ok(int x,int y)
    24 {
    25     if(x<1 || x>n || y<1 || y>m)
    26         return false;
    27     return true;
    28 }
    29 void dfs(int x,int y)
    30 {
    31     int t=ma[x][y];
    32     ma[x][y]=-1;
    33     int ntx,nty;
    34     tmp++;
    35     for(int k=0;k<4;k++)
    36     {
    37         if(t & (1<<k) ) continue;
    38         switch(k)
    39         {
    40             case 0:
    41                 ntx=x,nty=y-1;
    42                 break;
    43             case 1:
    44                 ntx=x-1,nty=y;
    45                 break;
    46             case 2:
    47                 ntx=x,nty=y+1;
    48                 break;
    49             case 3:
    50                 ntx=x+1,nty=y;
    51                 break;
    52         }
    53         if(!ok(ntx,nty)) continue;
    54         if(ma[ntx][nty] != -1)
    55             dfs(ntx,nty);
    56     }
    57 }
    58 int main()
    59 {
    60     while(~scanf("%d%d",&n,&m))
    61     {
    62         for(int i=1;i<=n;i++)
    63             for(int j=1;j<=m;j++)
    64                 scanf("%d",&ma[i][j]);
    65         ans=0,large=0;
    66         for(int i=1;i<=n;i++)
    67             for(int j=1;j<=m;j++)
    68             {
    69                 if(ma[i][j]==-1) continue;
    70                 ans++;
    71                 tmp=0;
    72                 dfs(i,j);
    73                 if(tmp>large)
    74                     large=tmp;
    75             }
    76         printf("%d\n%d\n",ans,large);
    77     }
    78     return 0;
    79 }
  • 相关阅读:
    CSS 文本
    javascript:void(0)的问题
    剑指offer
    牛课--C/C++
    Linux学习--第二波
    面经-csdn
    初学Linux
    二分查找法的实现和应用汇总
    vs2013下git的使用
    win10+vs2013+Qt5.4 安装方法
  • 原文地址:https://www.cnblogs.com/Missa/p/2890768.html
Copyright © 2011-2022 走看看