3752:走迷宫 bfs dfs

//bfs

#include

#include
char map[41][41];
int vis[41][41];
int col[4]={0,-1,0,1};
int row[4]={-1,0,1,0};
void bfs(int c,int r){
    int queue[100000];
    memset(queue,0,sizeof(queue));
    memset(vis,0,sizeof(vis));
    int front=0,rear=0;
    queue[rear++]=0;
    int len[41];
    memset(len,0,sizeof(len));
    len[0]=1; vis[0][0]=1;
    while(front         int p=queue[front++];
        int a=p/r,b=p%r;
        for(int i=0;i<4;i++){
            int x=a+col[i],y=b+row[i];
            if(x>=0&&y>=0&&x                 if(!vis[x][y]&&map[x][y]=='.'){
                    vis[x][y]=1;
                    queue[rear++]=x*r+y;
                    len[x*r+y]=len[a*r+b]+1;
                }
            }
        }
    }
    printf("%d\n",len[(c-1)*r+r-1]);
}
int main(){
    int c,r;
    scanf("%d%d",&c,&r);
    for(int i=0;i         getchar();
        for(int j=0;j         scanf("%c",&map[i][j]);
    }
    bfs(c,r);
    return 0;

}


//dfs

#include
#include
int r,c;
int min=1000000;
char map[41][41];
int vis[41][41];
int col[4]={0,-1,0,1};
int row[4]={-1,0,1,0};
void dfs(int p,int cnt){
    int a=p/c,b=p%c;
    if(a==r-1&&b==c-1){
        if(cnt         return;
    }
    for(int i=0;i<4;i++){
        int x=a+col[i],y=b+row[i];
        if(x>=0&&y>=0&&x             if(!vis[x][y]&&map[x][y]=='.'){
                vis[x][y]=1;
                dfs(x*c+y,cnt+1);
                vis[x][y]=0;
            }
        }
    }
}
int main(){
    scanf("%d%d",&r,&c);
    for(int i=0;i         getchar();
        for(int j=0;j         scanf("%c",&map[i][j]);
    }
    memset(vis,0,sizeof(vis));
    vis[0][0]=1;
    dfs(0,1);
    printf("%d\n",min);
    return 0;
}

你可能感兴趣的:(搜索)