📄 labyrinth2.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 + -