实习第12-16天

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iceSony/article/details/81502820

                                     实习第12-16天

日常修改预制体与lua脚本,涉及问题:

界面调整,等以后那天有意义的bug再记录好了

日常习惯

学了个迷宫算法=.=参考https://blog.csdn.net/wz2292667460/article/details/78160815

求解一个解(非最优==可以想下为什么)

#include<stdio.h>

#define r 4

#define c 4

//表示移动的四个方向

int Move[4][2]={

        {0,1},

        {1,0},

        {-1,0},

        {0,-1}

    };

//表示迷宫

int m[r+2][c+2]={

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

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

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

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

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

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

    };

//表示走过的路

int t[r+2][c+2]={0};



int Maze(int x,int y)

{

    //到达终点

    if(x==1 && y==4)

    {

        printf("(%d,%d)-->",x,y);

        return 1;

    }

    //往四个方向走

    for(int i=0;i<4;i++)

    {

        int a=x+Move[i][0];

        int b=y+Move[i][1];

        //如果移动的位置不是墙,且木有走过

        if(m[a][b]!=1 && t[a][b]!=1)

        {

            t[a][b]=1;//把该位置占

            int flag=Maze(a,b);//继续往下走

            //flag用来是区别到达终点,还是不符合往回走

            if(flag)

            {

                printf("(%d,%d)--->",x,y);

                return 1;

            }

        }

    }

    return 0;

}

int main(void)

{   

    t[1][1]=1;

    Maze(1,1);

    return 0;

}

显示所有解

#include<stdio.h>

#define r 4

#define c 4



int Move[4][2]={

        {0,1},

        {1,0},

        {-1,0},

        {0,-1}

    };

int m[r+2][c+2]={

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

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

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

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

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

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

    };

int t[r+2][c+2]={0};

int s[r*c][2];//用栈,存放走过的路径

int top=-1;//栈顶指针

int cnt=0;//统计情况

void show()

{

    printf("%d:\n",++cnt);

    for(int i=0;i<=top;i++)

    {

        printf("(%d,%d)-->",s[i][0],s[i][1]);

    }

    printf("\n");

}

void Maze(int x,int y)

{

    int i,a,b;

    if(x==1 && y==4)

    {

        show();

        return;

    }

    for(i=0;i<4;i++)

    {

        a=x+Move[i][0];

        b=y+Move[i][1];

        if(m[a][b]!=1 && t[a][b]!=1)

        {

            t[a][b]=1;

            s[++top][0]=a;

            s[top][1]=b;

            Maze(a,b);

            t[a][b]=0;

            top--;  

        }

    }

}

int main(void)

{   

    t[1][1]=1;

    s[++top][0]=1;

    s[top][1]=1;

    Maze(1,1);

    return 0;

}

还有一种去除t数组的方法

m[a][b]=1;

s[++top][0]=a;

s[top][1]=b;

Maze(a,b);

m[a][b]=0;

top--;  

所有数据可以存在数组里面,同样可以存到一个链表内,多个链表存到最优解中

 

typedef struct elem{ int now[2]; struct elem *nextstep; }Step;



typedef struct node{ int allstep; Step *nextstep; struct node *next; }ElemSN;

 

多加班一天=.= 项目内一测ヾ(◍°∇°◍)ノ゙

猜你喜欢

转载自blog.csdn.net/iceSony/article/details/81502820
今日推荐