zoukankan      html  css  js  c++  java
  • 杂题 深度优先搜索

    第一道懂的深度优先搜索题,找图中八连块的个数

    #include <iostream>
    #include <cstring>
    using namespace std;
    #define X 100
    int visit[X][X];
    int a[X][X];

    void dfs(int x,int y) //深度优先搜索
    {
    if(visit[x][y]||!a[x][y]) //如果是白色或者是遍历过的
    return;
    visit[x][y] = 1; //遍历过的标记为一
    dfs(x-1,y-1); dfs(x-1,y); dfs(x-1,y+1); //递归遍历周围
    dfs(x,y-1); dfs(x,y+1);
    dfs(x+1,y-1); dfs(x+1,y); dfs(x+1,y+1);
    }

    int main()
    {
    freopen("sum.in","r",stdin);
    freopen("sum.out","w",stdout);
    int n,i,j;
    while(cin>>n)
    {
    memset(a,0,sizeof(a));
    for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
    cin>>a[i][j];
    int count = 0;

    memset(visit,0,sizeof(visit)); //扩充边界,使边界涂成白色
    for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
    if(!visit[i][j]&&a[i][j])
    {
    count++; //计数
    dfs(i,j); //深度优先搜索
    }
    cout<<count<<endl;
    }
    return 0;
    }

  • 相关阅读:
    Linux中hadoop配置hdfs
    linux安装配置hadoop
    Linux配置Tomcat
    虚拟机jdk(在profile.d中)配置
    SSH免密登录
    Linux配置MySQL
    虚拟机jdk(profile)配置
    解释器模式实例分析
    第七天
    第六天
  • 原文地址:https://www.cnblogs.com/yejinru/p/2374724.html
Copyright © 2011-2022 走看看