• oj/1376


    #include <iostream>
    #include <stdlib.h>
    #include <math.h>
    #include <algorithm>
    
    using namespace std;
    char sts[50][50];
    bool visited[50][50];
    
    int DFS(int i, int j, int x2, int y2, int m, int n);
    int  minValue4(int sum1,int sum2,int sum3,int sum4);
    int  minValue3(int sum1,int sum2,int sum3);
    int  minValue2(int sum1,int sum2);
    int main() {
        int m, n;
        int x1, y1, x2, y2;
        cin >> m >> n;
        cin >> x1 >> y1 >> x2 >> y2;
    
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                cin >> sts[i][j];
                visited[i][j] = false;
            }
        }
        int sum;
    
        if (sts[x1][y1] == '#') {
            visited[x1][y1] = true;
        } else {
            if (!visited[x1][y1]) {
                sum = DFS(x1, y1, x2, y2, m, n);
            }
        }
    
        printf("%d
    ", sum);
        return 0;
    }
    
    int DFS(int i, int j, int x2, int y2, int m, int n) {
        visited[i][j] = true;
        if (i == x2 && j == y2) return 0;
        int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0;
        if (i + 1 < m && sts[i + 1][j] == '.'&&visited[i+1][j]== false) {
            sum1 = 1 + DFS(i + 1, j, x2, y2, m, n);
        }
        if (j + 1 < n && sts[i][j + 1] == '.'&&visited[i][j+1]== false) {
            sum2 = 1 + DFS(i, j + 1, x2, y2, m, n);
        }
        if (i - 1 >= 0 && sts[i - 1][j] == '.'&&visited[i-1][j]== false) {
            sum3 = 1 + DFS(i - 1, j, x2, y2, m, n);
        }
        if (j - 1 >= 0 && sts[i][j - 1] == '.'&&visited[i][j-1]== false) {
            sum4 = 1 + DFS(i, j - 1, x2, y2, m, n);
        }
        return  minValue4(sum1,sum2,sum3,sum4);
    //    return min(min(sum1,sum2),min(sum3,sum4));
    }
    int  minValue4(int sum1,int sum2,int sum3,int sum4){
        if(sum1==0){
          return   minValue3(sum2,sum3,sum4);
        }else if(sum2==0){
            return   minValue3(sum1,sum3,sum4);
        }else if(sum3 ==0){
            return   minValue3(sum1,sum2,sum4);
        }else if(sum4==0){
            return   minValue3(sum1,sum2,sum3);
        }else{
            return min(min(sum1,sum2),min(sum3,sum4));
        }
    }
    int  minValue3(int sum1,int sum2,int sum3){
        if(sum1==0){
            return minValue2(sum2,sum3);
        }else if(sum2==0){
            return minValue2(sum1,sum3);
        }else if(sum3==0){
            return minValue2(sum1,sum2);
        }else{
            return min(sum1,min(sum2,sum3));
        }
    }
    int  minValue2(int sum1,int sum2){
          if(sum1==0){
              return sum2;
          }else{
              return sum1;
          }
    }
    

      

  • 相关阅读:
    2019年2月14日训练日记
    定制你的WordPress
    打造你的专属埃菲尔塔
    【DIY】打造一个六足蜘蛛机器人
    【数据结构专题-03】树
    【数据结构专题-02】算法介绍
    【数据结构专题-01】数据结构基本介绍
    【DIY】制作一个刷卡进门装置
    【Java实战】Java实现简易音乐播放器
    【Java实战】Java实现简易坦克对战小游戏
  • 原文地址:https://www.cnblogs.com/zjf-293916/p/12090180.html
Copyright © 2020-2023  润新知