新学的深搜

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新学的深搜相关的知识,希望对你有一定的参考价值。

/*深搜的灵魂所在就是递归*/
//以此题为例http://acm.hdu.edu.cn/showproblem.php?pid=1312

#include<stdio.h>
#include<string.h>

char map[25][25];
int n,m;
int mark[25][25];

void dfs(int x,int y)
{
 if(x>=0&&y>=0&&x<n&&y<m)
 {
  if(map[x][y]==‘.‘&&mark[x][y]==0)
  {
   mark[x][y]=1;
   dfs(x+1,y);
   dfs(x-1,y);
   dfs(x,y+1);
   dfs(x,y-1);
  }
 }
}

int main()
{
 while(scanf("%d %d",&m,&n)&&(n!=0&&m!=0))
 {
  memset(mark,0,sizeof(mark));
  int i,j;
  int x,y;
  for(i=0;i<n;i++)
  {
   scanf("%s",&map[i]);
  }
  int flag=0;
  for(i=0;i<n;i++)
  {
   for(j=0;j<m;j++)
   {
    if(map[i][j]==‘@‘)
    {
     x=i;
     y=j;
     flag=1;
     break;
    }
   }
   if(flag)
   break;
   }
   map[i][j]=‘.‘;
   dfs(x,y);
   int ans=0;
   for(i=0;i<n;i++)
   {
    for(j=0;j<m;j++)
    {
     ans+=mark[i][j];
    }
   }
   printf("%d\n",ans);
 }
 return 0;
}

以上是关于新学的深搜的主要内容,如果未能解决你的问题,请参考以下文章

一道特别好的深搜题+bfs

图的广搜与深搜模板

算法学习笔记 二叉树和图遍历—深搜 DFS 与广搜 BFS

深搜(DFS),回溯,Fire Net

HDU2228栈深搜树哈希/同构

7.5 深搜-最佳调度问题(枚举排列+回溯+剪枝)