迷宫以16*16的矩阵存储在数据文件中(迷宫中的障碍物要占到一定比例)
答案:2 悬赏:0 手机版
解决时间 2021-01-16 05:00
- 提问者网友:精神病院里
- 2021-01-15 09:43
迷宫以16*16的矩阵存储在数据文件中(迷宫中的障碍物要占到一定比例)
最佳答案
- 五星知识达人网友:酒醒三更
- 2021-01-15 10:42
自己适当改一下下列程序迷宫的大小即可
#include
#include
#define MAXMATRIXSIZE 12
#define MAXSTACKSIZE 12
#define EXITROW 10
#define EXITCOL 10
int Maze[MAXMATRIXSIZE][MAXMATRIXSIZE];
int FALSE=0;
int TRUE=1;
typedef struct
{
short int Vert,Horiz;
} Offsets;
Offsets Move[8]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};typedef struct
{
short int Row,Col,Dir;
} ElementType;typedef struct
{
ElementType Data[MAXSTACKSIZE];
int Top;
} Stack;
void Push( Stack *PtrS, ElementType item )
{
if ( PtrS->Top == MAXSTACKSIZE-1 ) {
printf("堆栈满");
return;
}
else {
PtrS->Data[++(PtrS->Top)] = item;
return;
}
}ElementType Pop( Stack *PtrS )
{
ElementType ERROR;
ERROR.Col =-1;ERROR.Row =-1;ERROR.Dir =-1;
if ( PtrS->Top == -1 ) {
printf("堆栈空");
return ERROR ;
}
else
return ( PtrS->Data[(PtrS->Top)--] );
}void Path( )
{
int i, Row, Col, NextRow, NextCol, Dir, Found = FALSE;
int Mark[MAXMATRIXSIZE][MAXMATRIXSIZE];
ElementType Position;
Stack S;
S.Top = -1; Mark[1][1] = 1;
S.Top++;
S.Data[S.Top].Row = 1;
S.Data[S.Top].Col = 1;
S.Data[S.Top].Dir = 2;
while ( S.Top > -1 && !Found ) {
Position = Pop(&S);
Row = Position.Row; Col = Position.Col; Dir = Position.Dir;
while ( Dir < 8 && !Found ) {
NextRow = Row + Move[Dir].Vert;
NextCol = Col + Move[Dir].Horiz;
if ( NextRow == EXITROW && NextCol == EXITCOL )
Found = TRUE;
else
if ( !Maze[NextRow][NextCol] && !Mark[NextRow][NextCol] ){
Mark[NextRow][NextCol] = 1;
Position.Row = Row;
Position.Col = Col;
Position.Dir = Dir + 1;
Push(&S, Position);
Row = NextRow; Col = NextCol; Dir = 0;
}
else ++Dir;
}
}
if ( Found ) {
printf ("The path is:\n");
printf ("row col\n");
for ( i = 0; i <= S.Top; i++ )
printf ("%d %d\n", S.Data[i].Row, S.Data[i].Col);
printf ("%d %d\n", Row, Col);
printf ("%d %d\n", EXITROW, EXITCOL);
}
else
printf ("The maze does not have a path\n");
}
void main()
{
int i,j;
FILE *fp;
if((fp=fopen("迷宫矩阵.txt","r"))==NULL) {printf("文件不存在!");exit;}
for(i=0;i {printf("\n");
for(j=0;j {fscanf(fp,"%d",&Maze[i][j]);
printf("%d ",Maze[i][j]);}
} fclose(fp);
Path();
}追问运行不了
#include
#include
#define MAXMATRIXSIZE 12
#define MAXSTACKSIZE 12
#define EXITROW 10
#define EXITCOL 10
int Maze[MAXMATRIXSIZE][MAXMATRIXSIZE];
int FALSE=0;
int TRUE=1;
typedef struct
{
short int Vert,Horiz;
} Offsets;
Offsets Move[8]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};typedef struct
{
short int Row,Col,Dir;
} ElementType;typedef struct
{
ElementType Data[MAXSTACKSIZE];
int Top;
} Stack;
void Push( Stack *PtrS, ElementType item )
{
if ( PtrS->Top == MAXSTACKSIZE-1 ) {
printf("堆栈满");
return;
}
else {
PtrS->Data[++(PtrS->Top)] = item;
return;
}
}ElementType Pop( Stack *PtrS )
{
ElementType ERROR;
ERROR.Col =-1;ERROR.Row =-1;ERROR.Dir =-1;
if ( PtrS->Top == -1 ) {
printf("堆栈空");
return ERROR ;
}
else
return ( PtrS->Data[(PtrS->Top)--] );
}void Path( )
{
int i, Row, Col, NextRow, NextCol, Dir, Found = FALSE;
int Mark[MAXMATRIXSIZE][MAXMATRIXSIZE];
ElementType Position;
Stack S;
S.Top = -1; Mark[1][1] = 1;
S.Top++;
S.Data[S.Top].Row = 1;
S.Data[S.Top].Col = 1;
S.Data[S.Top].Dir = 2;
while ( S.Top > -1 && !Found ) {
Position = Pop(&S);
Row = Position.Row; Col = Position.Col; Dir = Position.Dir;
while ( Dir < 8 && !Found ) {
NextRow = Row + Move[Dir].Vert;
NextCol = Col + Move[Dir].Horiz;
if ( NextRow == EXITROW && NextCol == EXITCOL )
Found = TRUE;
else
if ( !Maze[NextRow][NextCol] && !Mark[NextRow][NextCol] ){
Mark[NextRow][NextCol] = 1;
Position.Row = Row;
Position.Col = Col;
Position.Dir = Dir + 1;
Push(&S, Position);
Row = NextRow; Col = NextCol; Dir = 0;
}
else ++Dir;
}
}
if ( Found ) {
printf ("The path is:\n");
printf ("row col\n");
for ( i = 0; i <= S.Top; i++ )
printf ("%d %d\n", S.Data[i].Row, S.Data[i].Col);
printf ("%d %d\n", Row, Col);
printf ("%d %d\n", EXITROW, EXITCOL);
}
else
printf ("The maze does not have a path\n");
}
void main()
{
int i,j;
FILE *fp;
if((fp=fopen("迷宫矩阵.txt","r"))==NULL) {printf("文件不存在!");exit;}
for(i=0;i
for(j=0;j
printf("%d ",Maze[i][j]);}
} fclose(fp);
Path();
}追问运行不了
全部回答
- 1楼网友:底特律间谍
- 2021-01-15 11:55
bfs刷过去,伴一个16×16的数组,记录数据走向就好。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯