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");
}
大多数想法要么平庸,要么更糟糕,这很大程度上因为绝妙的想法难得一见,而且他们还要在我们身边这个充斥了各种恶俗的所谓常识的环境中孕育生长。
原文地址:https://www.cnblogs.com/linux0537/p/6073913.html