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:\n");
    //        scanf("%d",maze[i][j]);
    //    }
    DFS(0,0);
    //printf("findpath:%d\n",findpath);//是否找到路径
    printf("(0, 0)\n");
    for(int i=0;i<countMax;i++){
      printf("(%d, %d)\n",best_x[i],best_y[i]);//打印出路径
    }
    //system("pause");
}

 

posted @ 2016-11-17 15:20  Pumpkin0227  阅读(125)  评论(0编辑  收藏  举报