笔记——DFS
来源:互联网 发布:佛教源码 编辑:程序博客网 时间:2024/05/20 16:34
/*深度优先算法(DFS)——列举(基于图的搜索)
对于
1->2->3->4->6->7
2->1->3-4->6
3->1->2
4->1->2
5->6
6->1->2->5
7->1
以1为起点开始遍历,
1 找到 2
2 找到 3
3 找不到返回 2
2 找到 4
4 找不到返回 2
2 找到 6
6 找到 5
5 找不到返回 6
6 找不到返回 2
2 找不到返回 1
1 找到 7
7 找不到返回 1
1 找不到结束
就是这样一个遍历,返回的过程
void dfs(int x){
vis[x]=true;
for(int i=1;i<=n;i++){
if(!vis[i]&&e[x][i])dfs(i);
}
return;
}
*/
/*
判断连通块大多数都用DFS(个人认为)
*/
#include <stdio.h>
#include <string.h>
#define MAXN 100
#define MAXM 100
char G[MAXN][MAXM];
int n,m;
bool use[MAXN][MAXM];
int d[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
void DFS(int x,int y)
{
use[x][y]=true;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
int dx=x+d[i][0];
int dy=y+d[i][1];
if(dx>=0&&dy>=0&&dx<n&&dy<m&&!use[dx][dy]&&G[dx][dy]=='*')
{
DFS(dx,dy);
}
}
}
}
int solve()
{
int ans=0;
memset(use,false,sizeof(use));
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(!use[i][j]&&G[i][j]=='*')
{
DFS(i,j);
ans++;
}
}
}
return ans;
}
int main()
{
while(~scanf("%d %d",&n,&m))
{
for(int i=0;i<n;i++)
{
scanf("%s",G[i]);
}
printf("%d\n",solve());
}
return 0;
}
/*
5 5
**...
..**.
**.*.
.*.*.
*****
2
*/
对于
1->2->3->4->6->7
2->1->3-4->6
3->1->2
4->1->2
5->6
6->1->2->5
7->1
以1为起点开始遍历,
1 找到 2
2 找到 3
3 找不到返回 2
2 找到 4
4 找不到返回 2
2 找到 6
6 找到 5
5 找不到返回 6
6 找不到返回 2
2 找不到返回 1
1 找到 7
7 找不到返回 1
1 找不到结束
就是这样一个遍历,返回的过程
void dfs(int x){
vis[x]=true;
for(int i=1;i<=n;i++){
if(!vis[i]&&e[x][i])dfs(i);
}
return;
}
*/
/*
判断连通块大多数都用DFS(个人认为)
*/
#include <stdio.h>
#include <string.h>
#define MAXN 100
#define MAXM 100
char G[MAXN][MAXM];
int n,m;
bool use[MAXN][MAXM];
int d[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
void DFS(int x,int y)
{
use[x][y]=true;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
int dx=x+d[i][0];
int dy=y+d[i][1];
if(dx>=0&&dy>=0&&dx<n&&dy<m&&!use[dx][dy]&&G[dx][dy]=='*')
{
DFS(dx,dy);
}
}
}
}
int solve()
{
int ans=0;
memset(use,false,sizeof(use));
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(!use[i][j]&&G[i][j]=='*')
{
DFS(i,j);
ans++;
}
}
}
return ans;
}
int main()
{
while(~scanf("%d %d",&n,&m))
{
for(int i=0;i<n;i++)
{
scanf("%s",G[i]);
}
printf("%d\n",solve());
}
return 0;
}
/*
5 5
**...
..**.
**.*.
.*.*.
*****
2
*/
阅读全文
0 0
- 笔记——DFS
- 搜索学习笔记——DFS
- DFS笔记
- UVA216 ——dfs
- hdu1175——DFS
- 迷雾——dfs
- 邻接表—DFS
- DFS—poj2488
- DFS—HDU1010
- 数独—dfs
- 图的遍历记(深度和广度优先搜索—BFS&&DFS)的笔记
- 算法学习笔记 二叉树和图遍历—深搜 DFS 与广搜 BFS
- 算法学习笔记 二叉树和图遍历—深搜 DFS 与广搜 BFS
- DFS学习笔记
- Mountain Walking ——dfs
- DFS——找朋友
- DFS——The Mine
- DFS——Maze Exploration
- 求组合钱数
- LeetCode----- 9.Palindrome Number
- Unity编写冰球对战游戏 2D版
- 获取Window是32位还是64位系统
- ios-tableView自动计算行高
- 笔记——DFS
- bzoj1096 [ZJOI2007]仓库建设(斜率)
- tmux鼠标配置出现错误unknown option: mode-mouse
- ACM-ICPC 2017南宁赛区网络赛题目题解收集
- leetcode 1. Two Sum (C语言)12
- Python脚本进行用户信用评分体系计算的案例
- input标签禁止输入隐藏光标
- 类似百度文库的在线浏览功能
- java 奇数阶幻方全解(连续摆数法)