zoukankan      html  css  js  c++  java
  • 超水 DFS ,+整数的二进制形式的运用,,取二进制的某个位

    1.裸的DFS ,

    2.但给的数据比较好玩,,由,由 1. 2。4.8中的某几个数之和组成的数据S。。发现其实可以用S的二进制的四位数表示他的四个方向。。

    3细节实现,取一个整数a的二进制的第N 位、 (a>>(N-1))&1

    代码
    #include<iostream>
    #define Nmax 55
    using namespace std;
    int col[Nmax][Nmax],n,m,Max,num;
    bool v[Nmax][Nmax];
    int DFS_VISITED(int x,int y)
    {
    // cout<<x<<" "<<y<<endl;
    int t=col[x][y];
    v[x][y]
    =true;
    int dir[4][2]={{0,-1},{-1,0},{0,1},{1,0}};
    int ans=1;
    for(int i=0;i<4;i++)
    {
    if(!((t>>i)&1))//重点
    {
    int xx=x+dir[i][0];
    int yy=y+dir[i][1];
    if(xx>=0&&xx<n&&yy>=0&&yy<m&&!v[xx][yy])
    ans
    +=DFS_VISITED(xx,yy);
    }
    }
    return ans;
    }
    void DFS()
    {
    num
    =0;
    Max
    =0;
    for(int i1=0;i1<n;i1++)
    for(int j1=0;j1<m;j1++)
    v[i1][j1]
    =false;
    for(int i=0;i<n;i++)
    {
    for(int j=0;j<m;j++)
    {
    if(!v[i][j])
    {

    int a=DFS_VISITED(i,j);
    if(a>Max)Max=a;
    num
    ++;
    }
    }
    }
    cout
    <<num<<endl;
    cout
    <<Max<<endl;
    }
    int main()
    {

    freopen(
    "input.txt","r",stdin);
    while(scanf("%d%d",&n,&m)!=EOF)
    {
    for(int i=0;i<n;i++)
    for(int j=0;j<m;j++)
    scanf(
    "%d",&col[i][j]);
    DFS();
    }
    return 0;
    }
  • 相关阅读:
    java json 库之 jackson
    java 多线程
    golang slice 和 string 重用
    golang 字节对齐
    golang 并发编程之生产者消费者
    golang 设计模式之选项模式
    golang aws-sdk-go 之 s3 服务
    markdown 一个优雅的写作工具
    常见句型、用法
    hg
  • 原文地址:https://www.cnblogs.com/gdutbean/p/1706718.html
Copyright © 2011-2022 走看看