c语言迷宫寻路操作

c语言迷宫寻路操作
#include <stdio.h>
#include <stdlib.h>

/**
*日期: 2019.8.19
*描述: 寻找迷宫中通道,判断迷宫能否走出
*版本: 0.0
*/

/*
1、定义迷宫
2、根据迷宫判断节点的可行性
0节点为活,1节点为死
boolean p[7][8];
3、定义入口节点(根结点)

4、根据节点可行性按顺序行走,行走到下一点,并判断死活
如果该节点附近只有一个可行节点,则将该节点化为死节点(出口除外)

5、递归4过程直到走入死点或者走出迷宫

6、如果走入死点则返回最近的活节点,重新选择方向,直至走出迷宫或者所有的活点都变为死点

*/

int maze[9][8]={0,0,1,0,0,0,1,1,
0,0,1,0,0,0,1,1,
0,0,1,0,1,1,0,1,
0,1,1,1,0,0,1,0,
0,0,0,1,0,0,0,0,
0,1,0,0,0,1,0,1,
0,1,1,1,1,1,0,1,
1,1,0,0,0,1,0,1,
1,1,0,0,0,0,0,0};

int mazelife[9][8]={};
int persentpoint[2]={0,0};
int beforepoint[2]={0,0};
int outpoint[2]={8,7};

void findlife(){
int i=0,j=0;
for(i=0;i<=8;i++)
{
for(j=0;j<=7;j++)
{
if(maze[i][j]==1){
mazelife[i][j]=1;
//printf("(%d,%d)\n",i,j);
}
else
mazelife[i][j]==0;
}
}
}

void findpath(){
int i=0;
if(persentpoint[0]<8&&mazelife[persentpoint[0]+1][persentpoint[1]]==0&&persentpoint[0]+1!=beforepoint[0])
{
beforepoint[0]=persentpoint[0];
persentpoint[0]++;
printf(“向下走\n”);
printf(“当前位置为(%d,%d)\n”,persentpoint[0],persentpoint[1]);
i++;
return;
}

if(persentpoint[0]>0&&mazelife[persentpoint[0]-1][persentpoint[1]]==0&&persentpoint[0]-1!=beforepoint[0])
{
    beforepoint[0]=persentpoint[0];
    persentpoint[0]--;
    printf("向上走\n");
    printf("当前位置为(%d,%d)\n",persentpoint[0],persentpoint[1]);
    i++;
    return;
}
if(persentpoint[1]<9&&mazelife[persentpoint[0]][persentpoint[1]+1]==0&&persentpoint[1]+1!=beforepoint[1])
{
    beforepoint[1]=persentpoint[1];
    persentpoint[1]++;
    printf("向右走\n");
    printf("当前位置为(%d,%d)\n",persentpoint[0],persentpoint[1]);
    i++;
    return;
}
if(persentpoint[1]>0&&mazelife[persentpoint[0]][persentpoint[1]-1]==0&&persentpoint[1]-1!=beforepoint[1])
{
    beforepoint[1]=persentpoint[1];
    persentpoint[1]--;
    printf("向左走\n");
    printf("当前位置为(%d,%d)\n",persentpoint[0],persentpoint[1]);
    i++;
    return;
}
if(i==0)
    printf("无法移动\n\n");//将当前节点设为死节点
    mazelife[persentpoint[0]][persentpoint[1]]=1;
    persentpoint[0]=beforepoint[0];
    persentpoint[1]=beforepoint[1];

}

void pointlife(){
int i=0;
if(persentpoint[0]<7)
i=i+(1-maze[persentpoint[0]+1][persentpoint[1]]);
if(persentpoint[0]>0)
i=i+(1-maze[persentpoint[0]-1][persentpoint[1]]);
if(persentpoint[1]<8)
i=i+(1-maze[persentpoint[0]][persentpoint[1]+1]);
if(persentpoint[1]>0)
i=i+(1-maze[persentpoint[0]][persentpoint[1]-1]);
if(i<=1)
mazelife[persentpoint[0]][persentpoint[1]]=1;
}
int walkout()
{
int i=1;
if(persentpoint[0]==outpoint[0]&&persentpoint[1]==outpoint[1])
{
printf(“成功走出迷宫\n”);
i=0;
}
if(mazelife[0][0]==1&&mazelife[0][1]==1&&mazelife[1][0]==1)
{
printf(“无法走出迷宫\n”);
i=0;
}
return i;
}
void outsavepoint()
{
int i=0,j=0;
for(i=0;i<=8;i++)
{
for(j=0;j<=7;j++)
{
if(mazelife[i][j]==0)
{
printf("(%d,%d)\n",i,j);
}
}
}
}
int main()
{
while(1)
{
findlife();
pointlife();
findpath();
if(walkout()==0)
{
break;
}
}
outsavepoint();
return 0;
}

/*
1、定义迷宫
2、根据迷宫判断节点的可行性
0节点为活,1节点为死
boolean p[7][8];
3、定义入口节点(根结点)

4、根据节点可行性按顺序行走,行走到下一点,并判断死活
如果该节点附近只有一个可行节点,则将该节点化为死节点(出口除外)

5、递归4过程直到走入死点或者走出迷宫

6、如果走入死点则返回最近的活节点,重新选择方向,直至走出迷宫或者所有的活点都变为死点

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值