龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

本人写的迷宫,不过知道这样才能输出所有的路径

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
本人写的迷宫,不过知道这样才能输出所有的路径,望各高手刺教 #include #include #define M 5 #define N 5 strUCt queue { int x; int y; int pre; }sq[200]; int maze[M+2][N+2]; typedef struct { int dx; int dy; }moved; mov

本人写的迷宫,不过知道这样才能输出所有的路径,望各高手刺教

#include

  #include

  #define M 5

  #define N 5

  strUCt queue

  {

   int x;

   int y;

   int pre;

  }sq[200];

  int maze[M+2][N+2];

  typedef struct

  { int dx;

   int dy;

  }moved;

  moved move[8];

  typedef struct

  {

   int x;

   int y;

  }ROAD;

  ROAD road[M*N];

  void inimove(moved move[]) /*initialize move[]*/

  {

   move[0].dx=0;move[0].dy=-1;

   move[1].dx=1;move[1].dy=-1;

   move[2].dx=1;move[2].dy=0;

   move[3].dx=1;move[3].dy=1;

   move[4].dx=0;move[4].dy=1;

   move[5].dx=-1;move[5].dy=1;

   move[6].dx=-1;move[6].dy=0;

   move[7].dx=-1;move[7].dy=-1;

  }

  void input(int maze[M+2][N+2])

  {

   int i,j;char ch;

   for(i=0;i<=M;i++) /*set the wall outside the maze*/

   {

   maze[i][0]=1;

   maze[i][N+1]=1;

   }

   for(j=0;j<=N+1;j++) /*set the wall outside the maze*/

   {

   maze[0][j]=maze[M+1][j]=1;

   }

   for(i=1;i<=M;i++) /*input the data of maze*/

   for(j=1;j<=N;j++)

   {

   ch=getch();

   maze[i][j]=(int)(ch-48);

   printf("%3d",ch-48);

   printf(" ");

   if(!(j%N))

   printf(" ");

   }

  }

void output(int rear) /*output the path*/

  {

   int i,j,k;

   for(j=0,k=rear;(k!=0)&&(j

   {

   road[j].x=sq[k].x;

   road[j].y=sq[k].y;

   k=sq[k].pre;

   }

  

   for(i=1;i<=M;i++)

   for(j=1;j<=N;j++)

   {

   if(maze[i][j]==-1)

   {

   for(k=0;k

   {

   if((i==road[k].x)&&(j==road[k].y))

   maze[i][j]=8; /*use '8'to mark the path*/

   }

   if(maze[i][j]==-1)

   maze[i][j]=0;

   }

   printf("%3d",maze[i][j]);

   printf(" ");

   if(j%N==0)

   printf(" ");

   }

  }

  

void path() /* seek the path*/

  {

   int i,j,x,y,v,front,rear,find;

   sq[1].x=1;sq[1].y=1;sq[1].pre=0;

   find=0;

   front=1;rear=1;maze[1][1]=-1;

   while(front<=rear&&!find)

   {

   x=sq[front].x;

   y=sq[front].y;

   for(v=0;v<=7;v++)

   {

   i=x+move[v].dx;

   j=y+move[v].dy;

   if(!maze[i][j])

   {

   rear++;

   sq[rear].x=i;

   sq[rear].y=j;

   sq[rear].pre=front;

   maze[i][j]=-1;

   }

   if(i==M&&j==N)

   {

   printf("One of the pathes is:(the path is marked by 8) ");

   output(rear);

   find=1;

   }

  

   }

   front++;

   }

   if(!find)

   printf("There is no path! ");

  }

int check(int maze[M+2][N+2]) /*check whether the data inputed is right*/

  {

   int i,j,m,n;

   for(i=1;i<=M;i++)

   for(j=1;j<=N;j++)

   {

   if((maze[i][j]!=1)&&(maze[i][j]!=0))

   {

   return(0);

   }

   }

   return(1);

  }

  main()

  {

   int i,j;char ch;

   printf("The size of the maze is %d*%d. ",M,N);

   printf("Input your maze[][](the number you input must be 1 or 0): ");/*input the data of the maze*/

   input(maze);

   printf("input completely. ");

   while(maze[1][1]==1maze[M][N]==1check(maze)==0) /*check whether the data inputed is right .*/

   { /*If the data is wrong,please input again.*/

   printf("Warning:maze[][] you input is wrong! ");

   printf("Maze[1][1] and maze[M][N] must both equal 0. ");

   printf("Every item of maze[][]must be 1 or 0. ");

   printf("Input your maze[][] again: ");

   input(maze);

   printf("input completely. ");

   }

   printf("Press any key to display the path. ");

   getch();

   inimove(move);

   path();

   printf("press ENTER to end the program: ");

   scanf("%c",&ch);

  }

  

  

  

精彩图集

赞助商链接