#include <stdio.h>
#include <conio.h>
#define SX +1 //南
#define NX -1 //北
#define WY -1 //西
#define EY +1 //东
#define LENGTH 30 //数组列长
#define WIDTH 30 //数组行宽
int maze_path(int array_x,int array_y,int root_x,int root_y);//子函数声明
int (* maze_array)[LENGTH]; //定义全局变量
int maze_length;
int maze_width;
void maze(int (* array)[],int length,int width){ //主功能函数
maze_array=array;
maze_length=length-1;
maze_width=width-1;
maze_path(0,0,0,0);
}
int maze_path(int array_x,int array_y,int root_x,int root_y){
if((array_x!=maze_width)||(array_y!=maze_length)){
if(array_x NX>=0) //北
if(((array_x NX!=root_x)||(array_y!=root_y))&&(!maze_array[array_x NX][array_y]))
if(maze_path(array_x NX,array_y,array_x,array_y)){
printf("The path is(%d,%d)\n",array_x NX,array_y);
return 1;
}
if((array_x SX<=maze_width)&&(array_y EY<=maze_length)) //东南
if(((array_x SX!=root_x)||(array_y EY!=root_y))&&!maze_array[array_x SX][array_y EY])
if(maze_path(array_x SX,array_y EY,array_x,array_y)){
printf("The path is(%d,%d)\n",array_x SX,array_y EY);
return 1;
}
if((array_x NX>=0)&&(array_y EY<=maze_length)) //东北
if(((array_x NX!=root_x)||(array_y EY!=root_y))&&(!maze_array[array_x NX][array_y EY]))
if(maze_path(array_x NX,array_y EY,array_x,array_y)){
printf("The path is(%d,%d)\n",array_x NX,array_y EY);
return 1;
}
if(array_y EY<=maze_length) //东
if(((array_x!=root_x)||(array_y EY!=root_y))&&(!maze_array[array_x][array_y EY]))
if(maze_path(array_x,array_y EY,array_x,array_y)){
printf("The path is(%d,%d)\n",array_x,array_y EY);
return 1;
}
if(array_x SX<=maze_width) //南
if(((array_x SX!=root_x)||(array_y!=root_y))&&!maze_array[array_x SX][array_y])
if(maze_path(array_x SX,array_y,array_x,array_y)){
printf("The path is(%d,%d)\n",array_x SX,array_y);
return 1;
}
if((array_x SX<=maze_width)&&(array_y WY>=0)) //西南
if(((array_x SX!=root_x)||(array_y WY!=root_y))&&!maze_array[array_x SX][array_y WY])
if(maze_path(array_x SX,array_y WY,array_x,array_y)){
printf("The path is(%d,%d)\n",array_x SX,array_y WY);
return 1;
}
if(array_y WY>=0) //西
if(((array_x!=root_x)||(array_y WY!=root_y))&&!maze_array[array_x][array_y WY])
if(maze_path(array_x,array_y WY,array_x,array_y)){
printf("The path is(%d,%d)\n",array_x,array_y WY);
return 1;
}
if((array_x NX>=0)&&(array_y WY>=0)) //西北
if(((array_x NX!=root_x)||(array_y WY!=root_y))&&!maze_array[array_x NX][array_y WY])
if(maze_path(array_x NX,array_y WY,array_x,array_y)){
printf("The path is(%d,%d)\n",array_x NX,array_y WY);
return 1;
}
}
if((array_x==maze_width)&&(array_y==maze_length)){
printf("The exit has been found!(%d,%d)\n",array_x,array_y);
return 1;
}
printf("No exit has been found!(%d,%d)\n",array_x,array_y);
return 0;
}
int main(){ //主函数
char temp=0;
int j=0,i=0;
int width,length;
int array[WIDTH][LENGTH];
printf("Input the number,guy!\nCapacitance:%d*%d\nSegment with: .\nFinash with: E\n",WIDTH,LENGTH);
for(;(i<WIDTH)&&(temp!='E')&&(j<LENGTH);){
temp=getche();
if(temp=='\r') printf("\n");
if(temp=='.'){
printf("\t(i=%d)\n",i);
i++;
j=0;
}
if((temp>47)&&(temp<58)){
array[i][j]=temp-48;
//printf("j=%d\t",j);
j++;
}
}
printf("\nwidth= ,length= \n");
scanf("%d,%d",&width,&length);
maze(array,length,width);
}
评论0