C语言10*10随机步

探讨C语言中实现随机步的效率问题,指出在最坏情况下需要尝试所有四个方向,文章寻求更优化的算法解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 随机步不难,就是效率低,每次移动最坏情况都要试满4个方向,还有更好的算法吗?

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void generate_random_walk(char walk[10][10]);
void print_array(char walk[10][10]);
int main()
{
    char walk[10][10];
    generate_random_walk(walk);
    print_array(walk);
    return 0;
}
void generate_random_walk(char walk[10][10])
{
    for(int i=0;i<10;i++)
    {
        for(int j=0;j<10;j++)
        {
            walk[i][j]='.';
        }
    }
    srand((unsigned)time(NULL));
    char ch='B';
    int ran;
    int m=0,n=0;
    walk[m][n]='A';
    while(ch<='Z')
    {
        ran=rand()%4;
        if (ran==0)
        {
            if(m-1>=0&&walk[m-1][n]=='.')
            {
                walk[m-1][n]=ch;
                m=m-1;
                ch++;
            }
            else if((m-1)<0&&walk[m][n-1]!='.'&&walk[m+1][n]!='.'&&walk[m][n+1]!='.')
            {
                break;
            }
            else if(walk[m][n+1]!='.'&&walk[m+1][n]!='.'&&walk[m-1][n]!='.'&&walk[m][n-1]!='.')
            {
                break;
            }
            else
            {
                continue;
            }
        }
        else if (ran==1)
        {
            if((n+1)<10&&walk[m][n+1]=='.')
            {
                walk[m][n+1]=ch;
                n=n+1;
                ch++;
            }
            else if((n+1)>=10&&walk[m][n-1]!='.'&&walk[m+1][n]!='.'&&walk[m-1][n]!='.')
            {
                break;
            }
            else if(walk[m][n+1]!='.'&&walk[m+1][n]!='.'&&walk[m-1][n]!='.'&&walk[m][n-1]!='.')
            {
                break;
            }
            else
            {
                continue;
            }
        }
        else if(ran==2)
        {
            if((m+1)<10&&walk[m+1][n]=='.')
            {
                walk[m+1][n]=ch;
                m=m+1;
                ch++;
            }
            else if((m+1)>=10&&walk[m][n-1]!='.'&&walk[m-1][n]!='.'&&walk[m][n+1]!='.')
            {
                break;
            }
            else if(walk[m][n+1]!='.'&&walk[m+1][n]!='.'&&walk[m-1][n]!='.'&&walk[m][n-1]!='.')
            {
                break;
            }
            else
            {
                continue;
            }
        }
        else if(ran==3)
        {
            if((n-1)>=0&&walk[m][n-1]=='.')
            {
                walk[m][n-1]=ch;
                n=n-1;
                ch++;
            }
            else if((n-1)<0&&walk[m][n+1]!='.'&&walk[m+1][n]!='.'&&walk[m-1][n]!='.')
            {
                break;
            }
            else if(walk[m][n+1]!='.'&&walk[m+1][n]!='.'&&walk[m-1][n]!='.'&&walk[m][n-1]!='.')
            {
                break;
            }
            else
            {
                continue;
            }
        }
        else
        {
            break;
        }
    }
}
void print_array(char walk[10][10])
{
    for(int i=0;i<10;i++)
    {
        for(int j=0;j<10;j++)
        {
            printf(" %c",walk[i][j]);
        }
        printf("\n");
    }
}

撞墙退出,遇阻换路


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值