筆記——DFS
/*深度優先算法(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
*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.