包小乐 发表于 2020-11-16 21:56:37

我写的随机步法的代码

这个是题目要求:
随机步法(Random Walk) 编写程序,⽣成⼀种贯穿10×10字符数组(初始时全为字符'.')的“随机步法”。程序必须随机地从⼀个元素“⾛到”另⼀个元素,每次都向上、向下、向左或向右移动⼀个元素位置。已访问过的元素按访问顺序⽤字⺟A到Z进⾏标记。

下⾯是⼀个输出示例:

A        .        .        .        .        .        .        .        .        .
B        C        D        .        .        .        .        .        .        .
.        F        E        .        .        .        .        .        .        .
H        G        .        .        .        .        .        .        .        .
I        .        .        .        .        .        .        .        .        .
J        .        .        .        .        .        .        .        Z        .
K        .        .        R        S        T        U        V        Y        .
L        M        P        Q        .        .        .        W        X        .
.        N        O        .        .        .        .        .        .        .
利⽤srand函数和rand函数(⻅程序deal.c)产⽣随机数,然后查看次数除以4的余数。余数⼀共有4种可能的值(0、1、2和3),指示下⼀次移动的4种可能⽅向。在执⾏移动之前,需要检查两项内容:⼀是不能⾛到数组外⾯,⼆是不能⾛到已有字⺟标记的位置。只要⼀个条件不满⾜,就得尝试换⼀个⽅向移动。如果4个⽅向都堵住了,程序就必须终⽌了。下⾯是提前结束的⼀个示例:

A        B        G        H        I        .        .        .        .        .
.        C        F        .        J        K        .        .        .        .
.        D        E        .        M        L        .        .        .        .
.        .        W        X        Y        P        Q        .        .        .
.        .        V        U        T        S        R        .        .        .
.        .        .        .        .        .        .        .        .        .
.        .        .        .        .        .        .        .        .        .
.        .        .        .        .        .        .        .        .        .
.        .        .        .        .        .        .        .        .        .
因为Y的4个⽅向都堵住了,所以没有地⽅可以放置下⼀步的Z了。


下面是我写的代码


#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(){
        char a;
        int i,j,choice=0;
        int w,h,x,num=0;
       
        for(i=0;i<10;i++){
          for(j=0;j<10;j++)
          a='.';
        }
          
        const char Alp={'A','B','C','D','E','F','G','H','I','J','K','L','M','N'
        ,'O','P','Q','R','S','T','U','V','W','X','Y','Z'};
       
        w = 0;
        h = 0;
        a=Alp;
        num++;
       
        while((num<26)&&(choice<4)){
                srand((unsigned)time(NULL));
                x = rand()%3;
               
                /*up*/
                if(x==0){
                        if((a=='.')&&(w-1)>=0){
                        w-=1;
                        a=Alp;
                        num++;
                        choice=0;
                        }
                        else
                        choice++;
                           }
                /*down*/       
   else if(x==1){
                   if((a=='.')&&(w+1)<10){
                          w+=1;
                          a=Alp;
                          num++;
                          choice=0;
            }
            else
            choice++;
                  }
      /*right*/
   else if(x==2){
                   if((a=='.')&&(h+1)<10){
                          h+=1;
                          a=Alp;
                          num++;
                          choice=0;
            }
            else
                        choice++;
                  }   
                 /*left*/
   else if(x==3){
                   if((a=='.')&&(w-1)>=0){
                          w-=1;
                          a=Alp;
                          num++;
                          choice=0;
                   }
                   else
                   choice++;
                  }
                  
                 }
   
   for(i=0;i<10;i++){
    for(j=0;j<10;j++){
            printf("%c",a);
           
    }
    printf("\n");
    }
    return 0;
   }


不知道为什么运行结果只能朝一个方向移动,求助。

xieglt 发表于 2020-11-17 08:45:35

srand((unsigned)time(NULL));
这个要放到循环外面

srand((unsigned)time(NULL));
while((num<26)&&(choice<4))
{
            x = rand()%3;
            。。。
}
页: [1]
查看完整版本: 我写的随机步法的代码