随机步法纪念

该程序实现了一个从'A'开始的字符在2D数组中随机行走的算法,直到所有路径被堵死为止。它使用了C语言编写,通过设置种子进行随机数生成,并根据四个方向(上、下、左、右)进行行走。在行走过程中,检查当前位置是否为空及是否越界,以确保行走的合法性。最后,输出行走形成的字符矩阵。
摘要由CSDN通过智能技术生成

模仿大佬思路

一各种初始化;

二初始化数组;

三设置可以从’A‘到'Z'的循环(在循坏前设置种子)//用了while

         其中要考虑条件:1.是否占位;//在要改变数组时检查是否为字母

                                       2.是否越界;//考虑行列值范围,若满足则下一步,否则continue重开

                                        3.是否堵死 //分二类,一是边角判断3个位置.二是中间判断4个位置 用多种if,末尾用break;

其中(1.2)是还能继续,但是本轮循环不能改变数组,同时要在下一个循环还原行列数值,(3.)是要跳出循环直接END;

           

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 10
#define S 25 



int main(){
    char a[N][N];
    char ch= 'A';
    int i=0;
    int z;
    int x=0,y=0;
    int m=0,n=0;
    for(int h=0;h<N;h++){
        for(int j=0;j<N;j++){
            a[h][j] = '.'; 
        }
    }
    a[0][0] = ch;
    srand((unsigned)time(NULL)); 
    while(i<S){
        
        x = m;
        y = n;
        
        z=rand() % 4;
        switch(z){
            case 0:
                y+=1;
            break;
            case 1:
                x-=1;
            break;
            case 2:
                y-=1;
            break;
            case 3:
                x+=1;
            break;
        }
        if(x<0||x>9||y<0||y>9){
            continue;}
        if(a[x][y] != '.'){
            continue;}
            m = x;
            n = y;
            ch++;    
            a[x][y] = ch ;
        if(x>0&&x<9&&y>0&&y<9){
            if(a[x-1][y] != '.'&&a[x+1][y] != '.'&&a[x][y-1] != '.'&&a[x][y+1] != '.'){
                break;
            }
        }
        if( x == 0 &&a[x+1][y] != '.'&&a[x][y-1] != '.'&&a[x][y+1] != '.' )
                {
            break;
        }
        if(x ==  9 &&a[x-1][y] != '.'&&a[x][y-1] != '.'&&a[x][y+1] != '.'){
            break;
        }
        if(y == 0 &&a[x-1][y] != '.'&&a[x+1][y] != '.'&&a[x][y+1] != '.'){
            break;
        }
        if( y == 9 &&a[x-1][y] != '.'&&a[x+1][y] != '.'&&a[x][y-1] != '.'){
            break;
        }
        
        i++;    
    }
    
    for(int h=0;h<N;h++){
        for(int j=0;j<N;j++){
            printf("%c",a[h][j]);
        }printf("\n");
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值