走迷宫问题,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"); }