zoukankan      html  css  js  c++  java
  • POJ——3984

    走迷宫问题,POJ上面的题

    #include <stdio.h>
    #include <stdlib.h>
    
    #define SIZE 5
    
    bool findpath = false;
    int DX[4]={-1,1,0,0};//每一步对应的纵坐标变化量,竖着的棋盘是X轴
    int DY[4]={0,0,-1,1};//每一步对应的横坐标变化量,横着的棋盘是Y轴
    int maze[SIZE][SIZE]={{1,1,0,0,0},{0,1,0,1,0},{0,0,0,0,0},{0,1,1,1,0},{0,0,0,1,0}};//迷宫情况
    int count=0;//
    int countMax =100;//MAX值
    int step=0;//走到第几步
    int best_x[100]={};//存储最优路径的x坐标
    int best_y[100]={};//存储最优路径的y坐标
    int lujing_x[100]={};//存储每一步的x坐标
    int lujing_y[100]={};//存储每一步的y坐标
    
    //计算当前可以达到目标点的路径长度
    int lujing_length()
    {
        int num=0;
        for(int i=0;i<SIZE;i++)
            for(int j=0;j<SIZE;j++)
            {
                if(maze[i][j]==2)
                    num ++;
            }
            return num;
    }
    
    void DFS(int x,int y){
        if(x==SIZE-1&&y==SIZE-1){
          findpath = true;
          count=lujing_length();
          if(count<countMax){
                countMax = count;
                for(int i=0;i<countMax;i++){
                            best_x[i] = lujing_x[i];
                            best_y[i] = lujing_y[i];
                }
          }
          return;
        }
    
        for(int i=0;i<4;i++){
            int NX = x +DX[i];
            int NY = y +DY[i];
            if(NX<SIZE&&NY<SIZE&&NX>=0&&NY>=0&&maze[NX][NY]==0&&(NX+NY!=0))
            {
                int tmp = maze[NX][NY];
                maze[NX][NY] = 2;
                lujing_x[step] = NX;//把每一步的路径存下来
                lujing_y[step] = NY;
                step++;
                DFS(NX,NY);
                step--;
                maze[NX][NY] = tmp; 
            }
    
        }
    }
    
    int main(){
        //for(int i=0;i<SIZE;i++)
        //    for(int j=0;j<SIZE;j++){
        //        printf("Please input the maze elements:
    ");
        //        scanf("%d",maze[i][j]);
        //    }
        DFS(0,0);
        //printf("findpath:%d
    ",findpath);//是否找到路径
        printf("(0, 0)
    ");
        for(int i=0;i<countMax;i++){
          printf("(%d, %d)
    ",best_x[i],best_y[i]);//打印出路径
        }
        //system("pause");
    }
    大多数想法要么平庸,要么更糟糕,这很大程度上因为绝妙的想法难得一见,而且他们还要在我们身边这个充斥了各种恶俗的所谓常识的环境中孕育生长。
  • 相关阅读:
    PHP Cookbook读书笔记 – 第18章安全和加密
    ANDROID开发之http调试常见错误
    GD库之有意思的imagesetstyle
    PHP Cookbook读书笔记 – 第06章函数
    PHP Cookbook读书笔记 – 第09章表单
    PHP Cookbook读书笔记 – 第04章数组
    PHP Cookbook读书笔记 – 第17章图形
    PHP常见面试问题
    SQL SERVER 表分区实施步奏
    PHP Cookbook读书笔记 – 第12章XML
  • 原文地址:https://www.cnblogs.com/linux0537/p/6073913.html
Copyright © 2011-2022 走看看