永发信息网

迷宫以16*16的矩阵存储在数据文件中(迷宫中的障碍物要占到一定比例)

答案:2  悬赏:0  手机版
解决时间 2021-01-16 05:00
迷宫以16*16的矩阵存储在数据文件中(迷宫中的障碍物要占到一定比例)
最佳答案
自己适当改一下下列程序迷宫的大小即可
#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();
}追问运行不了
全部回答
bfs刷过去,伴一个16×16的数组,记录数据走向就好。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
97房贷的房产抵押靠谱吗
若x+6的绝对值与3y-2的绝对值互为相反数,求x
三亚南边海渔村到三亚湾海坡十六巷多少公里
上古卷轴5梅鲁涅斯剃刀的刀柄宝石找不到
这是哪个画师画的
佳能相机M5如何与平板电脑连接
海门有临时工吗
求购三国杀ol专属武将陈琳,开天价的走远,QQ
为什么网上这么多人说福康砂锅不好?
像芋头叶一样的这是个什么花,看图
奔腾物流单号查询151025
夏利凉车启动怠速不稳熄火是什么原因
以《那一幕,我难以忘怀》为题,求一篇600字
和我今年16岁身高1米66如何快速长高,求大神
右图为哈药集团制药六厂生产的“新盖中盖牌”
推荐资讯
如何使铝合金铸件的刚度与强度提高
老赖能坐动车二等座吗
社会实践是什么
丝涟和金可儿哪个好?
有种蜥蜴叫做守宫,和其它蜥蜴有什么不同?
新买的竹菜板如何处理怎么保养不裂缝
素炒青菜花的做法,素炒青菜花怎么做好吃,素
为什么库里作为球队老大在勇士队一点话语权
刚刚学完js和jq,找什么项目做比较好
熟肉和水的密度哪个大? 蒸熟或煮熟的肉(和
下列有关两栖动物的描述中,错误的是(  )
oppor9手机怎么在手机内存里连续查看图片,不
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?