⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 labyrinth2.c

📁 1、 用随机数生成的方式(要求用户输入随机数)产生一个迷宫:“1”表示墙
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#define A 8
#define B 6
struct stack{
      struct node{
      int data1;
      int data2;
   }a[1000];
      int top;
};
typedef struct stack STACK;
typedef STACK * STACKPTR;

void push (STACKPTR , int m, int n);
void pop(STACKPTR, int *m1, int *n1, int array1[][B]);

main()
{
       int array[A][B], array1[A][B];
       STACK mystack;

       int i, j;
	   int m=1, n=1;
	   unsigned seed;
	   mystack.top = 999;

	   printf("Enter a seed:");
	   scanf("%u", &seed);
       srand (seed);

       for (i=1; i<=(A-2); i++)
	       for(j=1; j<=(B-2); j++)
		   {
	       array[i][j] = (rand()%2);
	       array[1][1] = 0;
	       array[9][9] = 0;
	       printf("%d ", array[i][j]);
	       if (j==(B-2))
	       printf("\n");
		   }
	printf("\n");
	for (j=0; j<=(B-1); j++)
	{
	    array[0][j] = 1;
	    array[A-1][j] = 1;
	}
	for (i=0; i<=(A-1); i++)
	{
        array[i][0] = 1;
	array[i][B-1] = 1;
	}/*Create the Labyrinth*/

	/*Copy a Labyrinth*/
	for (i=0; i<=A-1; i++)
	  {

	     for(j=0; j<=B-1; j++)
		{
		    array1[i][j] = array[i][j];
		}
	}
	push (&mystack, m, n);
	array1[m][n] = 0;

    while ((m!=A-1) && (n!=B-1) && mystack.top !=999)
    {  //to decide the orientation
       if(array1[m][n+1] == 0)
       {
	  push (&mystack, m, n);
	  array1[m][n] = 8;
	  n = n+1;
       }
       else if (array1[m+1][n+1]==0)
       {
	  push (&mystack, m, n);
	  array1[m][n] = 8;
	  m = m+1;
	  n = n+1;
       }
       else if (array1[m+1][n] == 0)
       {
	  push (&mystack, m, n);
	  array1[m][n] = 8;
	  m = m+1;
       }
       else if (array1[m+1][n-1] == 0)
       {
	  push (&mystack, m, n);
	  array1[m][n] = 8;
	  m = m+1;
	  n = n-1;
       }
       else if (array1[m][n-1] == 0)
       {
	  push (&mystack, m, n);
	  array1[m][n] = 8;
	  n = n-1;
       }
       else if (array1[m-1][n-1] == 0)
       {
	  push (&mystack, m, n);
	  array1[m][n] = 8;
	  m = m-1;
	  n = n-1;
       }
       else if (array1[m-1][n] == 0)
       {
	  push (&mystack, m, n);
	  array1[m][n] = 8;
	  m = m-1;
       }
	   else if(array1[m-1][n+1] == 0)
	   {
	  push (&mystack, m, n);
	  array1[m][n] = 8;
	  m = m-1;
	  n = n+1;
       }
       
	  else if(m==(A-2)&&n==(B-2))
     {
		array1[m][n] = 8;
        break;
	  }
       else
	      pop (&mystack, &m , &n, array1);
    }/*while is end*/
    
    printf("\n");
    for (i=1; i<=A-2; i++)
	    for (j=1; j<=B-2; j++)
		{
			printf("%d ", array1[i][j]);
			if(j==B-2)
			printf("\n");
		}
	if((m==1)&&(n==1)&& array1[m][n+1]!=0 && array1[m+1][n+1]!=0 && array1[m+1][n]!=0)
       {
	   printf("There is no way.\n");
       }
    printf("any input to end\n");
    scanf("%d",&i);
	if(i)
       return 0;
}
/*main is end*/

void push (STACKPTR mystack , int m, int n)
{
	 mystack->a[mystack->top].data1 = m;
	 mystack->a[mystack->top].data2 = n;
	 mystack->top -= 1;
}/*push is end*/

void pop(STACKPTR mystack, int *m1, int *n1, int array1[][B])
{
     array1[*m1][*n1] = 1;
	 mystack->top += 1;
     *m1 = mystack->a[mystack->top].data1;
     *n1 = mystack->a[mystack->top].data2;
}/*pop is end */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -