poj1979题解(dfs)

1.存的图用完之后要初始化。
2.还是有回溯的,只不过没有加还原标记而已。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 25
char map_[MAX][MAX];
int col,row;
int num;
int dir[4][2]={
    
    {
    
    -1,0},{
    
    1,0},{
    
    0,-1},{
    
    0,1}};
int isborder(int l,int r)//--->判断是否越界
{
    
    
    if(l>=0&&l<=row&&r<=col&&r>=0)
    {
    
    
        return 1;
    }
    else
        return 0;
}
int dfs(int l,int r)
{
    
    
    int ll,rr;
    for(int i=0;i<4;i++)
    {
    
    
        ll=l+dir[i][0];
        rr=r+dir[i][1];
        if(isborder(ll,rr)&&map_[ll][rr]=='.')
        {
    
    
            map_[ll][rr]='#';
            num++;
            dfs(ll,rr);
        }
    }
    return 0;
}
int main()
{
    
    
    while(scanf("%d%d",&col,&row)==2)
    {
    
    
        num=0;
        //flag=0;
        if(col==0&&row==0)
        {
    
    
            break;
        }
        for(int i=0;i<row;i++)
        {
    
    
            scanf("%s",&map_[i]);
        }
        for(int i=0;i<row;i++)
        {
    
    
            for(int j=0;j<col;j++)
            {
    
    
                if(map_[i][j]=='@')
                {
    
    
                    num++;
                    dfs(i,j);
                }
            }
        }
        printf("%d\n",num);
        memset(map_,'\0',sizeof(map_));
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/mingjiweixiao/article/details/113359414