!?468 2021-06-16 20:12 采纳率: 33.3%
浏览 14
已采纳

代码无解释无法理解,需要注释

#include<stdio.h>

#include<conio.h>  

int migong[10][10]= //设置迷宫,最外围1为墙 里边0为可走路径 1为障碍

{    

    {1,1,1,1,1,1,1,1,1,1},

    {1,0,0,0,0,0,0,1,1,1},

    {1,0,1,1,1,1,1,0,0,1},

    {1,0,1,0,0,0,0,0,0,1},

    {1,0,0,0,1,0,1,1,1,1},

    {1,1,1,1,0,0,1,1,1,1},

    {1,0,0,0,0,1,1,1,1,1},

    {1,0,1,1,0,0,1,1,1,1},

    {1,0,0,0,0,0,0,0,0,1},

    {1,1,1,1,1,1,1,1,1,1}

};

int num;

struct

{

int x,y,d;

}lj[100];//x,y分别为垂直和水平方向

 

void start()

{

int top=0,x,y,d,find;//d为设置方向,上下左右。find为设置找不找得到路

lj[top].x=1;

lj[top].y=1;

migong[1][1]=-1;

find=0;d=-1;

 

while(top>-1){

if(lj[top].x==8&&lj[top].y==8) 

{

printf("迷宫路径如下:\n");

printf("start->");

for(x=0;x<=top;x++)

{

printf("(%d,%d)-> ",lj[x].x,lj[x].y);//把找到的路径输出

num++;

if(num%8==0)

printf("\n");

printf("->end!\n");

}

 

while(d<4&&find==0){

d++;

switch(d){

case 0:x=lj[top].x-1; y=lj[top].y;  break;//方向为上

case 1:x=lj[top].x;   y=lj[top].y+1;break;//方向为右

case 2:x=lj[top].x+1; y=lj[top].y;  break;//方向为下

case 3:x=lj[top].x;   y=lj[top].y-1;}//方向为左

if(migong[x][y]==0)

find=1;

}

 

if(find==1){     //判断是否找得到

lj[top].d=d;

top++;

lj[top].x=x;

lj[top].y=y;

d=-1;find=0;     //重新调整方向

migong[x][y]=-1;}

else{

migong[lj[top].x][lj[top].y]=0;

top--;d=lj[top].d; //找不到的话退栈

}

}

}

 

void main()

{

start();

getch();

}

  • 写回答

3条回答 默认 最新

  • 关注
    #include<stdio.h>
    #include<conio.h>
    int migong[10][10]= //设置迷宫,最外围1为墙 里边0为可走路径 1为障碍
    {
    
        {1,1,1,1,1,1,1,1,1,1},
    
        {1,0,0,0,0,0,0,1,1,1},
    
        {1,0,1,1,1,1,1,0,0,1},
    
        {1,0,1,0,0,0,0,0,0,1},
    
        {1,0,0,0,1,0,1,1,1,1},
    
        {1,1,1,1,0,0,1,1,1,1},
    
        {1,0,0,0,0,1,1,1,1,1},
    
        {1,0,1,1,0,0,1,1,1,1},
    
        {1,0,0,0,0,0,0,0,0,1},
    
        {1,1,1,1,1,1,1,1,1,1}
    
    };
    int num;
    struct
    {
        int x,y,d;
    } lj[100]; //x,y分别为垂直和水平方向
    
    void start()
    
    {
        int top=0,x,y,d,find;//d为设置方向,上下左右。find为设置找不找得到路
        lj[top].x=1;//设置当前x,y的坐标初始为1
        lj[top].y=1;
        migong[1][1]=-1;//代表(1,1)走过了
        find=0;
        d=-1;
        while(top>-1)
        {
            if(lj[top].x==8&&lj[top].y==8)//如果到达(8,8)结束,输出路径
    
            {
                printf("迷宫路径如下:\n");
    
                printf("start->");
                for(x=0; x<=top; x++)
                {
                    printf("(%d,%d)-> ",lj[x].x,lj[x].y);//把找到的路径输出
                    num++;
                    if(num%8==0)//每8个占一行
                        printf("\n");
                }
                printf("->end!\n");
            }
            while(d<4&&find==0)//未到达(8,8)
            {
                d++;//d代表4个方向
                switch(d)
                {
                case 0:
                    x=lj[top].x-1;
                    y=lj[top].y;
                    break;//方向为上
    
                case 1:
                    x=lj[top].x;
                    y=lj[top].y+1;
                    break;//方向为右
    
                case 2:
                    x=lj[top].x+1;
                    y=lj[top].y;
                    break;//方向为下
    
                case 3:
                    x=lj[top].x;
                    y=lj[top].y-1;
                }//方向为左
    
                if(migong[x][y]==0)//0为可走路径 设置find=1代表能走
    
                    find=1;
            }
    
            if(find==1)      //判断是否找得到
            {
                lj[top].d=d;//记录当前的方向
                top++;
                lj[top].x=x;//记录当前的坐标
                lj[top].y=y;
                d=-1;
                find=0;     //重新调整方向
                migong[x][y]=-1;//代表(x,y)走过了
            }
            else//find=0找不到
            {
                migong[lj[top].x][lj[top].y]=0;
                top--;
                d=lj[top].d; //找不到的话退栈
            }
        }
    }
    void main()
    {
        start();
        getch();
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 微信小程序 用oss下载 aliyun-oss-sdk-6.18.0.min client报错
  • ¥15 ArcGIS批量裁剪
  • ¥15 labview程序设计
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥15 抖音看过的视频,缓存在哪个文件