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");
    }
    大多数想法要么平庸,要么更糟糕,这很大程度上因为绝妙的想法难得一见,而且他们还要在我们身边这个充斥了各种恶俗的所谓常识的环境中孕育生长。
  • 相关阅读:
    C#.ToString()格式大全
    C# 中的正则验证及用法
    解除SVN的控制
    SVN检出忽略文件夹文件
    Mac下查看及生成SSH Key
    Xcode-报错问题总结大全
    CentOS6.5上kafka 安装过程-多机版本
    神经网络绘图网址
    CentOs 中没有eth0文件
    Spring 入门
  • 原文地址:https://www.cnblogs.com/linux0537/p/6073913.html
Copyright © 2011-2022 走看看