zoukankan      html  css  js  c++  java
  • 迷宫搜索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 }
     
  • 相关阅读:
    常见设计模式,总结的不错(转)
    mysql查询当前时间,一天内,一周,一个月内的sql语句
    PBOC金融IC卡,卡片与终端交互的13个步骤,简介-第一组(转)
    金融IC卡 ARQC和ARPC计算方法和实例(转)
    如何解决结果由block返回情况下的同步问题(转)
    linux进程编程:子进程创建及执行函数简介
    exec函数族实例解析
    C语言中system()函数的用法总结(转)
    关于JSPatch热修复
    做个这样的APP要多久?[转]
  • 原文地址:https://www.cnblogs.com/ZKYAAA/p/12748455.html
Copyright © 2011-2022 走看看