zoukankan      html  css  js  c++  java
  • DFS深度优先搜索(附例题)

    深度优先搜索,简称DFS,算是应用最广泛的搜索算法,属于图算法的一种,dfs按照深度优先的方式搜索,通俗说就是“一条路走到黑”,dfs是一种穷举,实质是将所有的可行方案列举出来,不断去试探,知道找到问题的解,其过程是对每一个可能的分支路径深入到不能再深入为止,且每个顶点只能访问一次。

    dfs一般借助递归来实现

    例题:走迷宫

    #include <iostream>
    #include <string.h>
    using namespace std;
    int m,n;
    int sx,sy,ex,ey;//起点终点坐标
    int mp[20][20];//记录地图
    int cnt=0;//结果个数
    int ax[10]={0,0,-1,1};//x的四个走向
    int ay[10]={1,-1,0,0};//y的四个走向
    int vis[20][20];//记录是否来过
    
    int dfs(int x,int y){
        if((x>=0)&&(y>=0)&&(x<n)&&(y<m)&&(mp[x][y]==0)){//坐标合法性
            if(x==ex&&y==ey){//如果是终点
                cnt++;
                return 0;
            }
            vis[x][y]=1;//将x,y设为已经来过
            if(vis[x][y]==1){//判断是否相邻顶点可走
                for(int i=0;i<4;i++){
                    int tx=x+ax[i];
                    int ty=y+ay[i];
                    if((tx>=0)&&(ty>=0)&&(tx<n)&&(ty<m)&&(mp[tx][ty]==0)&&vis[tx][ty]==0)//相邻顶点可走条件
                        dfs(tx,ty);//递归dfs此点
                }
            }
            vis[x][y]=0;
            return 0;
            }
        
    }
    int main(){
        memset(vis,0,sizeof(vis));//将遍历数组全部置0
        cin>>n>>m;for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                char c;
                cin>>c;
                if(c=='.'){//边输入边置mp的0或1,并设置起点坐标和终点坐标
                    mp[i][j]=0;
                }else if(c=='S'){
                    sx=i;
                    sy=j;
                    mp[i][j]=0;
                }else if(c=='T'){
                    ex=i;
                    ey=j;
                    mp[i][j]=0;
                }else
                    mp[i][j]=1;//'#'为墙壁,走不通所以设为1
                
            }
        }
        dfs(sx,sy);//从起点开始遍历
        cout<<cnt<<endl;
        return 0;
    }
  • 相关阅读:
    各位相加
    模板方法设计模式
    581. Shortest Unsorted Continuous Subarray
    LeetCode
    判断质数
    整除问题
    A+B+C问题
    juery 安全加固 集合
    丁洪波 -- 不要“ 总是拿着微不足道的成就来骗自己”
    avalon源码阅读(1)
  • 原文地址:https://www.cnblogs.com/nilbook/p/13441883.html
Copyright © 2011-2022 走看看