DFS模板

作者: Alan66 | 来源:发表于2017-05-15 17:21 被阅读0次

(UVA572)
简单的DFS模板题

#include<cstdio>
#include<cstring>

char grid[101][101];
int m,n;
int dir[8][2]={{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1}};

void dfs(int x,int y)
{
    int i,xx,yy;
    grid[x][y]='*';
    for(i=0;i<8;i++)
    {
        xx=x+dir[i][0];
        yy=y+dir[i][1];
        if(xx<0||yy<0||xx>=m||yy>=n) continue;
        if(grid[xx][yy]=='@')
            dfs(xx,yy);
    }
}

int main()
{
    int i,j;
    int count;
    while(1)
    {
        scanf("%d%d",&m,&n);
        if(m==0) break;
        for(i=0;i<m;i++)
            scanf("%s",grid[i]);
        count=0;
        for(i=0;i<m;i++)
            for(j=0;j<n;j++)
                if(grid[i][j]=='@')
        {
            dfs(i,j);
            count++;
        }
        printf("%d\n",count);
    }
    return 0;
}

ZOJ2110/HDU1010
稍微复杂一点的模板,编译器用G++,用C++会CE

#include<cstdio>
#include<cstring>
#include<cmath>
int n,m,t;
char mamp[9][9];
int di,dj;
bool escape;
int dir[4][2]={{0,-1},{0,1},{1,0},{-1,0}};//分别表示上下左右四个方向

void dfs(int si,int sj,int cnt)
{
    int i,temp;
    if(si>n||sj>m||si<=0||sj<=0)
        return;
    if(si==di&&sj==dj&&cnt==t)
    {
        escape=1;
        return;
    }
    temp=(t-cnt)-fabs(si-di)-fabs(sj-dj);   //fabs是求绝对值的函数,头文件在math.h中
    if(temp<0||temp%2) return;
    for(i=0;i<4;i++)
    {
        if(mamp[si+dir[i][0]][sj+dir[i][1]]!='X')
        {
            mamp[si+dir[i][0]][sj+dir[i][1]]='X';
            dfs(si+dir[i][0],sj+dir[i][1],cnt+1);
            if(escape) return;
            mamp[si+dir[i][0]][sj+dir[i][1]]='.';
        }
    }
    return;
}
int main()
{
    int i,j;
    int si,sj;
    while(scanf("%d%d%d",&n,&m,&t)==3&&n&&m&&t)
    {
       int wall=0;
       char temp;
       scanf("%c",&temp);
       for(i=1;i<=n;i++)
       {
           for(j=1;j<=m;j++)
           {
               scanf("%c",&mamp[i][j]);
               if(mamp[i][j]=='S')
               {
                   si=i;
                   sj=j;
               }
               else if(mamp[i][j]=='D')
               {
                   di=i;
                   dj=j;
               }
               else if(mamp[i][j]=='X')
                    wall++;
           }
           scanf("%c",&temp);
       }
       if(n*m-wall<=t)
       {
           printf("NO\n");
           continue;
       }
       escape=0;
       mamp[si][sj]='X';
       dfs(si,sj,0);
       if(escape) printf("YES\n");
       else printf("NO\n");
    }
    return 0;
}

相关文章

  • DFS模板

    (UVA572)简单的DFS模板题 ZOJ2110/HDU1010稍微复杂一点的模板,编译器用G++,用C++会CE

  • python DFS 模板

  • 排列

    0X00 模板题目 46. Permutations 很典型的「排列模板题目」用 dfs 生成所有排列, 通常使用...

  • DFS思路及模板

    同样会有一天,如果你有了可以教给别人的东西,他们就能从你这儿学到,这种方式是美好的,有来有往的。这不是教育,而是历...

  • 算法笔记:DFS+Backtracking系列

    subset-DFS+Backtracking系列,有模板方法可以记 例1:leetcode 78. Subse...

  • 海岛问题

    通过这个问题把BFS、DFS、并查集的一些思路和程序主体模板进行一下总结。 其中BFS和DFS属于最基本最容易直接...

  • 模板-邻接表DFS遍历

  • 前缀树模板

    0X00 模板 创建 trie 注意这里的 # 记录的是上一轮的单词 BFS DFS

  • BFS/DFS python模板与实现

    BFS BFS在搜索完第k层的节点之前,是不会搜索第k+1层的节点的。 BFS原理 BFS所用的是队列。把每个还没...

  • BFS与DFS机试模板

    BFS的思想主要就是一层层扩散出去,使用一个辅助队列来实现,简单来讲就是每一步都要走可以走(判定边界,没走过等)的...

网友评论

      本文标题:DFS模板

      本文链接:https://www.haomeiwen.com/subject/gyjnzttx.html