单纯的dfs

此类题是dfs中最简单的题,如果要求类似于次数,多少种方法的问题,还要加上回溯法(恢复现场等),(n皇后剪枝)

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
const int maxn=105;
char a[maxn][maxn];
int lie[8][2]= {{-1,1},{0,1},{1,1},{-1,0},{1,0},{-1,-1},{1,-1},{0,-1}};//二维数组存储方向
int visit[maxn][maxn];
int n,m;
void dfs(int x,int y)          //将图遍历一次即可
{
    for(int i=0; i<8; i++)
    {
        int dx=x+lie[i][0];
        int dy=y+lie[i][1];
        if(dx>=0&&dx<n&&dy>=0&&dy<m&&a[dx][dy]==‘@‘&&!visit[dx][dy])
        {
            visit[dx][dy]=1;
            dfs(dx,dy);
        }
    }
}
int main()
{
    while(scanf("%d%d",&n,&m)!=EOF&&n&&m)
    {
        memset(visit,0,sizeof(visit));
        for(int i=0; i<n; i++)
        {
            scanf("%s",a[i]);
        }
        int count=0;
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<m; j++)
            {
                if(a[i][j]==‘@‘&&!visit[i][j])
                {
                    ++count;
                    dfs(i,j);
                }
            }
        }
        cout<<count<<endl;
    }
    return 0;
}
时间: 2024-10-06 09:16:09

单纯的dfs的相关文章

Word Search(深度搜索DFS,参考)

Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be us

无向图是否有环

判断无向图中是否存在回路(环)的算法描述 如果存在回路,则必存在一个子图,是一个环路.环路中所有顶点的度>=2. 算法: 第一步:删除所有度<=1的顶点及相关的边,并将另外与这些边相关的其它顶点的度减一. 第二步:将度数变为1的顶点排入队列,并从该队列中取出一个顶点重复步骤一. 如果最后还有未删除顶点,则存在环,否则没有环. 算法分析: 由于有m条边,n个顶点.如果m>=n,则根据图论知识可直接判断存在环路. (证明:如果没有环路,则该图必然是k棵树 k>=1.根据树的性质,边的数

(转)判断一个图是否有环 无向图 有向图

无向图: 法1: 如果存在回路,则必存在一个子图,是一个环路.环路中所有顶点的度>=2. n算法: 第一步:删除所有度<=1的顶点及相关的边,并将另外与这些边相关的其它顶点的度减一. 第二步:将度数变为1的顶点排入队列,并从该队列中取出一个顶点重复步骤一. 如果最后还有未删除顶点,则存在环,否则没有环. n算法分析: 由于有m条边,n个顶点.如果m>=n,则根据图论知识可直接判断存在环路. (证明:如果没有环路,则该图必然是k棵树 k>=1.根据树的性质,边的数目m = n-k.k

POJ - 2922 Honeymoon Hike

题意:爬不同高度的山,尽量让最高和最低的跨度小 思路:二分枚举跨度,单纯的DFS会超时 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN = 110; int arr[MAXN][MAXN],vis[MAXN][MAXN],n; int dx[4] = {1,-1,0,0}; int

[Leetcode][JAVA] Path Sum I &amp;&amp; II

Path Sum Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum. For example:Given the below binary tree and sum = 22, 5 / 4 8 / / 11 13 4 / \ 7 2 1 return t

判断有木有环

没有找到原文出处,请参考一下链接: http://www.cnblogs.com/hiside/archive/2010/12/01/1893878.html http://topic.csdn.net/u/20071023/11/3edb81fc-37b2-4506-906e-44dc0fc521f2.html 一.无向图: 方法1: 如果存在回路,则必存在一个子图,是一个环路.环路中所有顶点的度>=2. n算法: 第一步:删除所有度<=1的顶点及相关的边,并将另外与这些边相关的其它顶点的度

判断一个图是否有环 无向图 有向图(转)

没有找到原文出处,请参考一下链接: http://www.cnblogs.com/hiside/archive/2010/12/01/1893878.html http://topic.csdn.net/u/20071023/11/3edb81fc-37b2-4506-906e-44dc0fc521f2.html 一.无向图: 方法1: 如果存在回路,则必存在一个子图,是一个环路.环路中所有顶点的度>=2. n算法: 第一步:删除所有度<=1的顶点及相关的边,并将另外与这些边相关的其它顶点的度

luogu P1331 海战

P1331 海战 题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防海军部仅有很少的几位军官能指挥大型海战.因此,他们考虑培养一些新的海军指挥官,他们选择了"海战"游戏来帮助学习. 在这个著名的游戏中,在一个方形的盘上放置了固定数量和形状的船只,每只船却不能碰到其它的船.在这个题中,我们仅考虑船是方形的,所有的船只都是由图形组成的方形.编写程序求出该棋盘上

【C++】判断一个图是否有环 无向图 有向图(转载)

没有找到原文出处,请参考一下链接: http://www.cnblogs.com/hiside/archive/2010/12/01/1893878.html http://topic.csdn.net/u/20071023/11/3edb81fc-37b2-4506-906e-44dc0fc521f2.html 一.无向图: 方法1: 如果存在回路,则必存在一个子图,是一个环路.环路中所有顶点的度>=2. n算法: 第一步:删除所有度<=1的顶点及相关的边,并将另外与这些边相关的其它顶点的度