• 迷宫搜索dfs实现


    题目大意:

    S表示起点,T表示终点,*表示墙壁,.表示平地,求起点到终点的走法
     
    样例数据:
      5 6
       ....S*
       .***..
       .*..*.
       *.***.
       .T....
     1 /*
     2  * @Descripttion: 
     3  * @version: 
     4  * @Author: ZKYAAA
     5  * @Date: 2020-04-21 21:44:53
     6  * @LastEditors: 请叫我ZK谕啊啊啊
     7  * @LastEditTime: 2020-04-21 22:21:30
     8  * 
     9  *   5 6
    10  *   ....S*
    11  *   .***..
    12  *   .*..*.
    13  *   *.***.
    14  *   .T....
    15  *   
    16  * 
    17  * S表示起点,T表示终点,*表示墙壁,.表示平地,求起点到终点的走法
    18  * 
    19  */
    20 
    21 #include <bits/stdc++.h>
    22 using namespace std;
    23 int n,m,x,y;
    24 string a[110];
    25 int dir[4][2]={{-1,0},{0,-1},{1,0},{0,1}};
    26 bool in(int x,int y){
    27     return 0<=x&&x<n&&0<=y&&y<m;
    28 }
    29 bool vis[110][110];
    30 bool dfs(int x,int y){
    31     if(a[x][y]=='T'){
    32         return true;
    33     }
    34     vis[x][y]=1;
    35     a[x][y]='m';
    36     for(int i=0;i<4;i++){
    37         int tx=x+dir[i][0];
    38         int ty=y+dir[i][1];
    39         if(in(tx,ty)&&a[tx][ty]!='*'&&!vis[tx][ty]){
    40             if(dfs(tx,ty)){
    41                 return true;
    42             }
    43         }
    44     }
    45     // int tx=x-1,ty=y;
    46     // if(in(tx,ty)&&a[tx][ty]!='*'&&!vis[tx][ty]){
    47     //     if(dfs(tx,ty)){
    48     //         return true;
    49     //     }
    50     // }
    51     // tx=x,ty=y-1;
    52     // if(in(tx,ty)&&a[tx][ty]!='*'&&!vis[tx][ty]){
    53     //     if(dfs(tx,ty)){
    54     //         return true;
    55     //     }
    56     // }
    57     // tx=tx=x+1,ty=y;
    58     // if(in(tx,ty)&&a[tx][ty]!='*'&&!vis[tx][ty]){
    59     //     if(dfs(tx,ty)){
    60     //         return true;
    61     //     }
    62     // }
    63     // tx=x,ty=y+1;
    64     // if(in(tx,ty)&&a[tx][ty]!='*'&&!vis[tx][ty]){
    65     //     if(dfs(tx,ty)){
    66     //         return true;
    67     //     }
    68     // }
    69     vis[x][y]=0;
    70     a[x][y]='*';
    71     return false;
    72 }
    73 
    74 int main(){
    75     
    76     cin>>n>>m;
    77     for(int i=0;i<n;i++){
    78         cin>>a[i];
    79     }
    80     for(int i=0;i<n;i++){
    81         for(int j=0;j<m;j++){
    82             if(a[i][j]=='S'){
    83                 x=i,y=j;
    84             }
    85         }
    86     }
    87     if(dfs(x,y)){
    88         for(int i=0;i<n;i++){
    89             cout<<a[i]<<endl;
    90         }
    91     }else{
    92         cout<<"No"<<endl;
    93     }
    94     return 0;
    95 }
     
  • 相关阅读:
    电影投票使用到index索引 isdigit range += format upper
    for循环删除列表里的内容 删除字典中的内容
    3.格式化输出 format 三种方法集合% f
    列表和字符串的转换及statswith,endswith的应用判断
    过滤器,使用到in for break
    sort排序及reverse反转的结合使用
    列表内的改动
    django 第五天 自定义标签 静态文件
    Mysql 基础 1
    django 第四天模板渲染
  • 原文地址:https://www.cnblogs.com/ZKYAAA/p/12748455.html
Copyright © 2020-2023  润新知